Created
January 28, 2019 23:16
-
-
Save twof/5a6bf342adfa7715fa95a65877566aac to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func processEventMessage( req: Request, e: EventMessage) throws -> Future<EventResponse> { | |
let logger = try req.make(Logger.self) | |
logger.debug("This is the event to process: (e)") | |
guard let sessionStatus = e.sessionStatus else { | |
logger.info("Unable to parse metadata for (e)") | |
throw EventReceiveError.CouldNotDecodeMetadata(event: e) | |
} | |
let eventUUID = e.uuid | |
let eventName = sessionStatus.name | |
let projectID = sessionStatus.projectID | |
logger.info("Working on event UUID (eventUUID)") | |
logger.info("Looking for project with ID (projectID) to link to (eventUUID)") | |
return Projects.query(on: req).filter(.projectID == projectID).first().flatMap(to: EventResponse.self) { project in | |
if let project = project { | |
let newEvent = Event(uuid: eventUUID, projectIdentifier: projectID).save(on: req) | |
project.dateLastModified = Date() | |
let updatedProject = project.update(on: req) | |
return map(to: EventResponse.self, newEvent, updatedProject) { event, project in | |
logger.info("Event Received for: (projectID) -> Updated using (event.uuid)") | |
return EventResponse(projectID: projectID, status: "Updated") | |
} | |
} else { | |
return Project(projectID: projectID, dateCreated: Date(), dateLastModified: Date()).save(on: req).flatMap(to: EventResponse.self) { project in | |
// add child eventUUID | |
let newEvent = Event(uuid: eventUUID, projectIdentifier: projectID).save(on: req) | |
return newEvent.map(to: EventResponse.self) { event in | |
logger.info("Event Received for: (projectID) -> Created using (event.uuid)") | |
return EventResponse(projectID: projectID, status: "Created") | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment