package com.cosmicpush.app.system;
import com.cosmicpush.app.domain.accounts.Account;
import com.cosmicpush.app.domain.accounts.AccountStore;
import com.cosmicpush.app.domain.accounts.actions.CreateAccountAction;
import com.couchace.core.api.CouchDatabase;
import com.couchace.core.api.CouchSetup;
import com.couchace.jersey.JerseyCouchHttpClient;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.datatype.joda.JodaModule;
import org.crazyyak.dev.common.exceptions.ExceptionUtils;
import org.crazyyak.dev.common.id.TimeUuidIdGenerator;
import org.crazyyak.dev.couchace.DefaultCouchServer;
import org.crazyyak.dev.couchace.YakJacksonCouchJsonStrategy;
import org.crazyyak.dev.couchace.support.CouchUtils;
import org.crazyyak.dev.jackson.YakJacksonModule;
import org.joda.time.DateTimeZone;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@Component
public class CpCouchServer extends DefaultCouchServer {
private final String databaseName;
private static final List<String> designNames = Arrays.asList("account", "api-request");
private static final String prefix = "/push-server/design-docs/";
private static final String suffix = "-design.json";
@Autowired
public CpCouchServer(@Value("${couchdb.name}") String databaseName) {
super(new Module[]{
new JodaModule(),
new YakJacksonModule(),
new CpJacksonModule()});
this.databaseName = ExceptionUtils.assertNotZeroLength(databaseName, "databaseName");
}
public String getDatabaseName() {
return databaseName;
}
public CouchDatabase database() {
return super.database(databaseName);
}
@PostConstruct
public void validateDatabases() throws IOException {
CouchDatabase database = database();
CouchUtils.createDatabase(database, new TimeUuidIdGenerator(), "/push-server/json/account.json");
CouchUtils.validateDesign(database, designNames, prefix, suffix);
}
}