Family-Map-Project / FamilyMapServer / FamilyMapServerStudent-master / src / services / RegisterService.java
RegisterService.java
Raw
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<Event> 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;
        }
    }
}