Skip to content
Snippets Groups Projects
Commit fa994854 authored by Daniel Gerhardt's avatar Daniel Gerhardt
Browse files

STASH

parent 88ef8bf8
Branches api-v3
No related merge requests found
......@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class V2ToV3Migration implements Migration {
......@@ -41,14 +42,21 @@ public class V2ToV3Migration implements Migration {
}
public void migrate() {
createV2Index();
migrateUsers();
migrateRooms();
}
private void createV2Index() {
List<MangoCouchDbConnector.MangoQuery.Sort> fields = new ArrayList<>();
fields.add(new MangoCouchDbConnector.MangoQuery.Sort("type", false));
fromConnector.createJsonIndex("type-index", fields);
}
private void migrateUsers() {
HashMap<String, Object> queryOptions = new HashMap<>();
Map<String, Object> queryOptions = new HashMap<>();
queryOptions.put("type", "userdetails");
MangoCouchDbConnector.MangoQuery query = fromConnector.new MangoQuery(queryOptions);
MangoCouchDbConnector.MangoQuery query = new MangoCouchDbConnector.MangoQuery(queryOptions);
query.setLimit(LIMIT);
for (int skip = 0;; skip += LIMIT) {
......@@ -63,14 +71,14 @@ public class V2ToV3Migration implements Migration {
HashMap<String, Object> loggedInQueryOptions = new HashMap<>();
loggedInQueryOptions.put("type", "logged_in");
loggedInQueryOptions.put("user", userV2.getUsername());
MangoCouchDbConnector.MangoQuery loggedInQuery = fromConnector.new MangoQuery(loggedInQueryOptions);
MangoCouchDbConnector.MangoQuery loggedInQuery = new MangoCouchDbConnector.MangoQuery(loggedInQueryOptions);
List<LoggedIn> loggedInList = fromConnector.query(loggedInQuery, LoggedIn.class);
LoggedIn loggedIn = loggedInList.size() > 0 ? loggedInList.get(0) : null;
HashMap<String, Object> motdListQueryOptions = new HashMap<>();
motdListQueryOptions.put("type", "motdlist");
motdListQueryOptions.put("username", userV2.getUsername());
MangoCouchDbConnector.MangoQuery motdlistQuery = fromConnector.new MangoQuery(motdListQueryOptions);
MangoCouchDbConnector.MangoQuery motdlistQuery = new MangoCouchDbConnector.MangoQuery(motdListQueryOptions);
List<MotdList> motdListList = fromConnector.query(motdlistQuery, MotdList.class);
MotdList motdList = motdListList.size() > 0 ? motdListList.get(0) : null;
......@@ -82,9 +90,9 @@ public class V2ToV3Migration implements Migration {
}
private void migrateRooms() {
HashMap<String, Object> queryOptions = new HashMap<>();
Map<String, Object> queryOptions = new HashMap<>();
queryOptions.put("type", "session");
MangoCouchDbConnector.MangoQuery query = fromConnector.new MangoQuery(queryOptions);
MangoCouchDbConnector.MangoQuery query = new MangoCouchDbConnector.MangoQuery(queryOptions);
query.setLimit(LIMIT);
for (int skip = 0;; skip += LIMIT) {
......
......@@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.util.Converter;
import de.thm.arsnova.entities.serialization.View;
import org.ektorp.CouchDbInstance;
import org.ektorp.DbAccessException;
import org.ektorp.http.JacksonableEntity;
import org.ektorp.impl.ObjectMapperFactory;
import org.ektorp.impl.StdCouchDbConnector;
import org.slf4j.Logger;
......@@ -30,13 +31,13 @@ public class MangoCouchDbConnector extends StdCouchDbConnector {
* Represents a <code>_find</code> query for CouchDB's Mango API.
* See http://docs.couchdb.org/en/stable/api/database/find.html#db-find.
*/
public class MangoQuery {
public static class MangoQuery {
@JsonSerialize(converter = Sort.ToListConverter.class)
public class Sort {
public class ToListConverter implements Converter<Sort, List<String>> {
public static class Sort {
public static class ToListConverter implements Converter<Sort, Map<String, String>> {
@Override
public List<String> convert(Sort value) {
return Arrays.asList(value.field, value.descending ? "desc" : "asc");
public Map<String, String> convert(Sort value) {
return Arrays.as(value.field, value.descending ? "desc" : "asc");
}
@Override
......@@ -46,7 +47,7 @@ public class MangoCouchDbConnector extends StdCouchDbConnector {
@Override
public JavaType getOutputType(TypeFactory typeFactory) {
return typeFactory.constructGeneralizedType(typeFactory.constructType(List.class), String.class);
return typeFactory.constructGeneralizedType(typeFactory.constructMapType(Map.class), String.class, String.class);
}
}
......@@ -216,4 +217,21 @@ public class MangoCouchDbConnector extends StdCouchDbConnector {
return result;
}
public void createJsonIndex(final String name, final List<MangoQuery.Sort> fields) {
Map<String, Object> query = new HashMap<>();
Map<String, Object> index = new HashMap<>();
query.put("name", name);
query.put("type", "json");
query.put("index", index);
index.put("fields", fields);
String queryString;
try {
queryString = objectMapper.writeValueAsString(query);
logger.debug("Creating CouchDB index Mango API: {}", queryString);
} catch (JsonProcessingException e) {
throw new DbAccessException(e);
}
restTemplate.postUncached(dbURI.append("_index").toString(), queryString);
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment