package services; import dao.*; import model.AuthToken; import model.Event; import model.Person; import model.User; import request.RegisterRequest; import result.RegisterResult; import java.util.List; import java.util.UUID; /** * Implementation of the /user/register API route */ public class RegisterService { /** * Registers a new user, generates 4 generations of ancestor data, and returns an auth token * @param r - the registerRequest * @return the result of the register operation */ public RegisterResult register(RegisterRequest r) throws DataAccessException { Database db = new Database(); RegisterResult result = new RegisterResult(); String authToken = UUID.randomUUID().toString(); String personID = UUID.randomUUID().toString(); User newUser = new User(r.getUsername(), r.getPassword(), r.getEmail(), r.getFirstName(), r.getLastName(), r.getGender(), personID); AuthToken token = new AuthToken(r.getUsername(), authToken); try { db.openConnection(); PersonDAO pDao = new PersonDAO(db.getConnection()); new UserDAO(db.getConnection()).createUser(newUser); new AuthTokenDAO(db.getConnection()).createAuthToken(token); DataGenerator dataGenerator = new DataGenerator(); Person person = dataGenerator.createGenerations(newUser, newUser.getGender(), 4, db.getConnection()); Person userPerson = person; List eventsToTransfer = new EventDAO(db.getConnection()).findEventsForPerson(userPerson.getPersonID()); new EventDAO(db.getConnection()).removePersonEvents(person.getPersonID()); pDao.removePersonByID(person.getPersonID()); userPerson.setFirstName(newUser.getFirstName()); userPerson.setLastName(newUser.getLastName()); userPerson.setGender(newUser.getGender()); userPerson.setPersonID(newUser.getPersonID()); for (int i = 0; i < eventsToTransfer.size(); i++) { eventsToTransfer.get(i).setPersonID(userPerson.getPersonID()); new EventDAO(db.getConnection()).createEvent(eventsToTransfer.get(i)); } pDao.createPerson(userPerson); db.closeConnection(true); result.setAuthtoken(authToken); result.setUsername(newUser.getUsername()); result.setPersonID(newUser.getPersonID()); result.setSuccess(true); return result; } catch (Exception e) { e.printStackTrace(); db.closeConnection(false); result.setMessage("Error: " + e.getMessage()); result.setSuccess(false); return result; } } }