{"openapi":"3.0.0","paths":{"/user/create":{"post":{"operationId":"UserController_createUser","summary":"Create a new user with images","parameters":[],"requestBody":{"required":true,"description":"User data and images","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreateUserRequestDTO"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInResponseDTO"}}}}},"tags":["User"]}},"/user/data/{userId}":{"put":{"operationId":"UserController_updateUser","summary":"Update an existing user","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"User data and images","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UpdateUserRequestDTO"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublicDTO"}}}}},"tags":["User"]},"get":{"operationId":"UserController_getOwnUserData","summary":"Get private user data by ID","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"responses":{"200":{"description":"The user has been successfully retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPrivateDTO"}}}},"404":{"description":"User not found."}},"tags":["User"]}},"/user/changePwd/{userId}":{"put":{"operationId":"UserController_updateUserPassword","summary":"Update user password","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserPasswordDTO"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublicDTO"}}}}},"tags":["User"]}},"/user/location/{userId}":{"put":{"operationId":"UserController_updateLocation","summary":"Update user location","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationUpdateDTO"}}}},"responses":{"200":{"description":"The user location has been successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublicDTO"}}}},"404":{"description":"User not found."}},"tags":["User"]}},"/user/password-forgotten":{"put":{"operationId":"UserController_requestPasswordChangeAsForgotten","summary":"Request change password of user account","parameters":[],"requestBody":{"required":true,"description":"User email and reset code sent via email.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequestDTO"}}}},"responses":{"200":{"description":"Account password change has been requested successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordResponseDTO"}}}},"404":{"description":"User not found."}},"tags":["User"]}},"/user/user-count":{"get":{"operationId":"UserController_getUserCount","summary":"Get user count","parameters":[],"responses":{"200":{"description":"User count has been returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCountDTO"}}}}},"tags":["User"]}},"/user/reset-password":{"put":{"operationId":"UserController_resetPassword","summary":"Reset password of user account","parameters":[],"requestBody":{"required":true,"description":"User email and reset code sent via email including new chosen password.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResetPasswordDTO"}}}},"responses":{"200":{"description":"Account password has been reset successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResetPwdSuccessDTO"}}}},"403":{"description":"Reset password token expired"},"404":{"description":"User not found, reset password token invalid."}},"tags":["User"]}},"/user/notification-settings/{userId}":{"get":{"operationId":"UserController_getNotificationSettings","summary":"Get notification settings","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserNotificationSettingsDTO"}}}}}},"tags":["User"]},"put":{"operationId":"UserController_updateNotificationSettings","summary":"Update notification settings","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserNotificationSettingsDTO"}}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"boolean"}}}}},"tags":["User"]}},"/user/change-notification-settings":{"get":{"operationId":"UserController_changeNotificationSettings","parameters":[{"name":"userId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["User"]}},"/user/request-deletion":{"get":{"operationId":"UserController_getAccountDeletionForm","parameters":[],"responses":{"200":{"description":""}},"tags":["User"]},"post":{"operationId":"UserController_requestAccountDeletionViaForm","summary":"Request deletion of user account","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestAccountDeletionViaFormDTO"}}}},"responses":{"200":{"description":"Account deletion request from form has been processed."},"400":{"description":"Invalid email provided."}},"tags":["User"]}},"/user/request-deletion/{userId}":{"put":{"operationId":"UserController_requestAccountDeletion","summary":"Request deletion of user account","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Account deletion has been requested successfully."},"404":{"description":"User not found."}},"tags":["User"]}},"/user/delete/{deletionToken}":{"get":{"operationId":"UserController_deleteUser","summary":"Deletion of user account","parameters":[{"name":"deletionToken","required":true,"in":"path","description":"Unique, one time and expiring deletion token","schema":{"type":"string"}}],"responses":{"200":{"description":"Account has been deleted successfully."},"403":{"description":"Deletion token expired"},"404":{"description":"User not found, deletion token invalid."}},"tags":["User"]}},"/notification/push-token/{userId}":{"post":{"operationId":"NotificationController_storePushToken","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorePushTokenDTO"}}}},"responses":{"201":{"description":""}},"tags":["Push Notifications"]}},"/user-reports/{userId}":{"post":{"operationId":"UserReportController_create","summary":"Create a new user report","parameters":[{"name":"userId","required":true,"in":"path","description":"Reporting User ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserReportDTO"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"boolean"}}}}},"tags":["user-reports"]}},"/auth/login":{"post":{"operationId":"AuthController_signIn","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInDTO"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInResponseDTO"}}}}},"tags":["Auth"]}},"/auth/login/jwt":{"post":{"operationId":"AuthController_signInByJWT","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInJwtDTO"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInResponseDTO"}}}}},"tags":["Auth"]}},"/auth/token/refresh":{"post":{"operationId":"AuthController_refreshJwtToken","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshJwtDTO"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInResponseDTO"}}}}},"tags":["Auth"]}},"/encounter/{userId}":{"get":{"operationId":"EncounterController_getEncountersByUser","summary":"Get encounters of a user within a date range","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","description":"Start date for filtering","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":true,"in":"query","description":"End date for filtering","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EncounterPublicDTO"}}}}},"404":{"description":"User not found"}},"tags":["Encounter"]}},"/encounter/{userId}/status":{"put":{"operationId":"EncounterController_updateStatus","summary":"Update encounter status","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEncounterStatusDTO"}}}},"responses":{"200":{"description":"Encounter status updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericStatusDTO"}}}},"404":{"description":"Encounter not found."}},"tags":["Encounter"]}},"/encounter/{userId}/message":{"post":{"operationId":"EncounterController_pushMessage","summary":"Push a new message to the encounter","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushMessageDTO"}}}},"responses":{"201":{"description":"Message added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericStatusDTO"}}}},"404":{"description":"Encounter not found."}},"tags":["Encounter"]}},"/encounter/{encounterId}/encounterLocation/{userId}":{"get":{"operationId":"EncounterController_getLocationOfEncounter","summary":"Get current location of encounter.","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}},{"name":"encounterId","required":true,"in":"path","description":"Encounter ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetLocationOfEncounterResponseDTO"}}}},"201":{"description":"Location of encounter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetLocationOfEncounterResponseDTO"}}}},"404":{"description":"Encounter not found."},"412":{"description":"Other user not nearby right now."}},"tags":["Encounter"]}},"/pending-user":{"post":{"operationId":"PendingUserController_registerUserForEmailVerification","summary":"Creates a user with only an email to verify.","parameters":[],"requestBody":{"required":true,"description":"User email.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationForVerificationRequestDTO"}}}},"responses":{"200":{"description":"Email successfully registered. Still needs to be verified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationForVerificationResponseDTO"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationForVerificationResponseDTO"}}}},"409":{"description":"Email already exists."}},"tags":["PendingUser"]}},"/pending-user/verify-email":{"put":{"operationId":"PendingUserController_verifyEmail","summary":"Verify email with verification code.","parameters":[],"requestBody":{"required":true,"description":"User email and verification code.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailDTO"}}}},"responses":{"200":{"description":""}},"tags":["PendingUser"]}},"/pending-user/accept-special-data":{"put":{"operationId":"PendingUserController_setAcceptedSpecialDataGenderLookingForAt","summary":"Accept special data privacy","parameters":[],"requestBody":{"required":true,"description":"Accept special data privacy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAcceptedSpecialDataGenderLookingForDTO"}}}},"responses":{"200":{"description":""}},"tags":["PendingUser"]}},"/map/{userId}":{"get":{"operationId":"MapController_getUserLocations","summary":"Get the clustered locations of other users","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WeightedLatLngDTO"}}}}}},"tags":["Map"]}},"/user-feedback":{"post":{"operationId":"UserFeedbackController_createUserFeedback","summary":"Create a user feedback.","parameters":[],"requestBody":{"required":true,"description":"The User's feedback.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeedbackRequestDTO"}}}},"responses":{"200":{"description":"User feedback created successfuly."},"201":{"description":""},"400":{"description":"Failed to create user feedback."}},"tags":["User-Feedback"]}},"/event/events/{lang}":{"get":{"operationId":"EventController_getAllUpcomingEvents","summary":"Get upcoming and active events","parameters":[{"name":"lang","required":true,"in":"path","description":"Language to get event data in.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventPublicDTO"}}}}}},"tags":["Event"]}},"/main/uptime":{"get":{"operationId":"AppController_getUptime","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}}}}},"info":{"title":"Offlinery","description":"API of Offlinery","version":"1","contact":{}},"tags":[{"name":"app","description":""}],"servers":[{"url":"http://localhost:3000/v1"}],"components":{"schemas":{"BlacklistedRegionDTO":{"type":"object","properties":{"location":{"type":"object","properties":{"type":{"type":"string","enum":["Point"]},"coordinates":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2}},"description":"GeoJSON Point representing the location of the blacklisted region (0:lon, 1:lat)","example":{"type":"Point","coordinates":[-74.006,40.7128]}},"radius":{"type":"number","description":"Radius of the blacklisted region in meters","example":1000}},"required":["location","radius"]},"CreateUserDTO":{"type":"object","properties":{"firstName":{"type":"string"},"email":{"type":"string","format":"email"},"clearPassword":{"type":"string"},"wantsEmailUpdates":{"type":"boolean"},"birthDay":{"type":"string","format":"date"},"gender":{"enum":["woman","man"],"type":"string"},"genderDesire":{"type":"array","items":{"type":"string","enum":["woman","man"]}},"approachChoice":{"enum":["approach","be_approached","both"],"type":"string"},"intentions":{"type":"array","items":{"type":"string","enum":["friendship","casual","relationship","reconnect_friends"]}},"blacklistedRegions":{"description":"Array of blacklisted regions","example":[{"latitude":40.7128,"longitude":-74.006,"radius":1000}],"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/BlacklistedRegionDTO"}},"approachFromTime":{"type":"string","format":"date-time","nullable":true},"approachToTime":{"type":"string","format":"date-time","nullable":true},"bio":{"type":"string","nullable":true},"dateMode":{"enum":["ghost","live"],"type":"string"},"preferredLanguage":{"enum":["en","de"],"type":"string"}},"required":["firstName","email","clearPassword","wantsEmailUpdates","birthDay","gender","genderDesire","approachChoice","intentions","dateMode","preferredLanguage"]},"CreateUserRequestDTO":{"type":"object","properties":{"createUserDTO":{"format":"json","allOf":[{"$ref":"#/components/schemas/CreateUserDTO"}]},"images":{"type":"array","items":{"type":"string","format":"binary"},"description":"An array of image files","maxItems":6}},"required":["createUserDTO","images"]},"UserPrivateDTO":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the user"},"firstName":{"type":"string","description":"The first name of the user"},"age":{"type":"number","description":"Age of user"},"imageURIs":{"type":"array","items":{"type":"string"},"description":"An array of image uris","maxItems":6},"bio":{"type":"string","description":"The user's bio"},"intentions":{"type":"array","items":{"type":"string","enum":["friendship","casual","relationship","reconnect_friends"]},"description":"The user's intentions"},"trustScore":{"type":"number","description":"The user's trust score"},"isActive":{"type":"boolean","description":"Indicates if the user account is active"},"email":{"type":"string","description":"The unique email of the user"},"wantsEmailUpdates":{"type":"boolean","description":"Indicates if the user wants to receive email updates"},"blacklistedRegions":{"description":"Locations to not be approached at","type":"array","items":{"$ref":"#/components/schemas/BlacklistedRegionDTO"}},"birthDay":{"type":"string","format":"date"},"approachFromTime":{"type":"string","format":"time","description":"The time from which the user can be approached"},"approachToTime":{"type":"string","format":"time","description":"The time until which the user can be approached"},"dateMode":{"enum":["ghost","live"],"type":"string","description":"The date mode of the user"},"verificationStatus":{"enum":["verified","pending","denied"],"type":"string","description":"The verification status of the user"},"approachChoice":{"enum":["approach","be_approached","both"],"type":"string","description":"The approach choice of the user"},"gender":{"enum":["woman","man"],"type":"string","description":"The gender of the user"},"genderDesire":{"type":"array","items":{"type":"string","enum":["woman","man"]},"description":"The gender the user is interested in"},"ageRange":{"type":"array","items":{"type":"number"},"description":"The user's age range"},"markedForDeletion":{"type":"boolean","description":"Has user recently requested account deletion?"}},"required":["id","firstName","age","imageURIs","bio","intentions","isActive","email","wantsEmailUpdates","blacklistedRegions","birthDay","approachFromTime","approachToTime","dateMode","verificationStatus","approachChoice","gender","genderDesire","markedForDeletion"]},"SignInResponseDTO":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPrivateDTO"},"status":{"enum":["JWT_INVALID","JWT_DECODE_ERROR","JWT_CREATE_ERROR","VALID"],"type":"string"}},"required":["accessToken","refreshToken","user","status"]},"UpdateUserDTO":{"type":"object","properties":{"firstName":{"type":"string"},"email":{"type":"string","format":"email"},"wantsEmailUpdates":{"type":"boolean"},"birthDay":{"type":"date","format":"date"},"gender":{"enum":["woman","man"],"type":"string"},"genderDesire":{"type":"array","items":{"type":"string","enum":["woman","man"]}},"approachChoice":{"enum":["approach","be_approached","both"],"type":"string"},"intentions":{"type":"array","items":{"type":"string","enum":["friendship","casual","relationship","reconnect_friends"]}},"ageRange":{"type":"array","items":{"type":"number"}},"blacklistedRegions":{"description":"Array of blacklisted regions","example":[{"latitude":40.7128,"longitude":-74.006,"radius":1000}],"type":"array","items":{"$ref":"#/components/schemas/BlacklistedRegionDTO"}},"approachFromTime":{"type":"string","format":"time"},"approachToTime":{"type":"string","format":"time"},"bio":{"type":"string"},"dateMode":{"enum":["ghost","live"],"type":"string"},"preferredLanguage":{"enum":["en","de"],"type":"string"},"indexImagesToDelete":{"type":"array","items":{"type":"number"}}}},"UpdateUserRequestDTO":{"type":"object","properties":{"updateUserDTO":{"format":"json","allOf":[{"$ref":"#/components/schemas/UpdateUserDTO"}]},"images":{"type":"array","items":{"type":"string","format":"binary"},"description":"An array of image files","maxItems":6}}},"UserPublicDTO":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the user"},"firstName":{"type":"string","description":"The first name of the user"},"age":{"type":"number","description":"Age of user"},"imageURIs":{"type":"array","items":{"type":"string"},"description":"An array of image uris","maxItems":6},"bio":{"type":"string","description":"The user's bio"},"intentions":{"type":"array","items":{"type":"string","enum":["friendship","casual","relationship","reconnect_friends"]},"description":"The user's intentions"},"trustScore":{"type":"number","description":"The user's trust score"}},"required":["id","firstName","age","imageURIs","bio","intentions"]},"UpdateUserPasswordDTO":{"type":"object","properties":{"oldPassword":{"type":"string"},"newPassword":{"type":"string"}},"required":["oldPassword","newPassword"]},"LocationUpdateDTO":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude of the user's location","example":40.7128},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude of the user's location","example":-74.006}},"required":["latitude","longitude"]},"ResetPasswordRequestDTO":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"}},"required":["email"]},"ResetPasswordResponseDTO":{"type":"object","properties":{"timeout":{"type":"number","description":"The timeout when the user can resend a verification code in milliseconds."},"codeIssuedAt":{"format":"date-time","type":"string","description":"Timestamp when the verification code was issued."},"email":{"type":"string","example":"user@example.com"}},"required":["timeout","codeIssuedAt","email"]},"UserCountDTO":{"type":"object","properties":{"userCount":{"type":"number","minimum":0,"description":"Amount of users"}},"required":["userCount"]},"VerifyResetPasswordDTO":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"verificationCode":{"type":"string","minLength":6,"maxLength":6,"example":"123456"},"newClearPassword":{"type":"string"}},"required":["email","verificationCode","newClearPassword"]},"UserResetPwdSuccessDTO":{"type":"object","properties":{"id":{"type":"string","description":"User id."},"passwordReset":{"type":"boolean","description":"Password reset status."}},"required":["id","passwordReset"]},"UserNotificationSettingsDTO":{"type":"object","properties":{"notificationSettingKey":{"type":"string","nullable":false,"description":"Notification Setting"},"notificationSettingLbl":{"type":"string","nullable":true,"description":"User facing label"},"notificationSettingValue":{"type":"boolean","nullable":false,"description":"Notification Setting"}},"required":["notificationSettingKey","notificationSettingLbl","notificationSettingValue"]},"RequestAccountDeletionViaFormDTO":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"StorePushTokenDTO":{"type":"object","properties":{"pushToken":{"type":"string","description":"The Expo push token for the user's device","example":"ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]"}},"required":["pushToken"]},"CreateUserReportDTO":{"type":"object","properties":{"incidentDescription":{"type":"string","description":"The description of the incident","example":"The user was being disrespectful in chat"},"keepReporterInTheLoop":{"type":"boolean","description":"Whether to keep the reporter updated on the report status","example":true},"incidentType":{"enum":["Disrespectful","Child Sexual Abuse","Sexual harassment","Violent behavior","Other"],"type":"string","description":"The type of incident","example":"Disrespectful"},"encounterId":{"type":"string","description":"The ID of the user being reported"}},"required":["incidentDescription","keepReporterInTheLoop","incidentType","encounterId"]},"SignInDTO":{"type":"object","properties":{"email":{"type":"string"},"clearPassword":{"type":"string"}},"required":["email","clearPassword"]},"SignInJwtDTO":{"type":"object","properties":{"jwtAccessToken":{"type":"string"}},"required":["jwtAccessToken"]},"RefreshJwtDTO":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"]},"LocationDTO":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude of the user's location","example":40.7128},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude of the user's location","example":-74.006}},"required":["latitude","longitude"]},"MessagePublicDTO":{"type":"object","properties":{"id":{"type":"string","description":"Message id."},"content":{"type":"string","description":"Message sent by user."},"senderUserId":{"type":"string","description":"Who sent the message?"},"sentAt":{"type":"string","format":"datetime","description":"The date time the message was sent."}},"required":["id","content","senderUserId","sentAt"]},"EncounterPublicDTO":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the encounter"},"status":{"enum":["not_met","met_not_interested","met_interested"],"type":"string","description":"The status of the encounter"},"lastDateTimePassedBy":{"type":"string","format":"time","description":"The date time they were nearby last time."},"lastLocationPassedBy":{"nullable":true,"description":"Last rough location passed by","allOf":[{"$ref":"#/components/schemas/LocationDTO"}]},"reported":{"type":"boolean","description":"Has this encounter been reported by any of the users"},"otherUser":{"description":"Other Users that was nearby","allOf":[{"$ref":"#/components/schemas/UserPublicDTO"}]},"messages":{"description":"User messages","nullable":true,"type":"array","items":{"$ref":"#/components/schemas/MessagePublicDTO"}},"isNearbyRightNow":{"type":"boolean","nullable":true,"default":null},"amountStreaks":{"type":"number","default":1}},"required":["id","status","lastDateTimePassedBy","reported","otherUser","messages","isNearbyRightNow","amountStreaks"]},"UpdateEncounterStatusDTO":{"type":"object","properties":{"status":{"enum":["not_met","met_not_interested","met_interested"],"type":"string","description":"New encounter status"},"encounterId":{"type":"string","description":"Encounter ID"}},"required":["status","encounterId"]},"GenericStatusDTO":{"type":"object","properties":{"success":{"type":"boolean","description":"User facing status."},"info":{"type":"string","description":"Additional information about the response."}},"required":["success","info"]},"PushMessageDTO":{"type":"object","properties":{"content":{"type":"string","description":"Message content"},"encounterId":{"type":"string","description":"Encounter ID"}},"required":["content","encounterId"]},"GetLocationOfEncounterResponseDTO":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude of the user's location","example":40.7128},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude of the user's location","example":-74.006},"lastTimeLocationUpdated":{"format":"date-time","type":"string","description":"Last time location was updated"}},"required":["latitude","longitude","lastTimeLocationUpdated"]},"RegistrationForVerificationRequestDTO":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"language":{"enum":["en","de"],"type":"string"},"wantsEmailUpdates":{"type":"boolean"}},"required":["email","language","wantsEmailUpdates"]},"RegistrationForVerificationResponseDTO":{"type":"object","properties":{"timeout":{"type":"number","description":"The timeout when the user can resend a verification code in milliseconds."},"codeIssuedAt":{"format":"date-time","type":"string","description":"Timestamp when the verification code was issued."},"email":{"type":"string","example":"user@example.com"},"alreadyVerifiedButNotRegistered":{"type":"boolean"},"registrationJWToken":{"type":"string"}},"required":["timeout","codeIssuedAt","email","alreadyVerifiedButNotRegistered","registrationJWToken"]},"VerifyEmailDTO":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"verificationCode":{"type":"string","minLength":6,"maxLength":6,"example":"123456"}},"required":["email","verificationCode"]},"SetAcceptedSpecialDataGenderLookingForDTO":{"type":"object","properties":{"email":{"type":"string","format":"email"},"dateTimeAccepted":{"type":"string","format":"date-time","nullable":true}},"required":["email"]},"WeightedLatLngDTO":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"weight":{"type":"number"}},"required":["latitude","longitude"]},"UserFeedbackRequestDTO":{"type":"object","properties":{"rating":{"type":"number","minimum":1,"maximum":5,"description":"The rating from 1-5."},"feedbackText":{"type":"string","maxLength":500,"description":"Optional feedback text."}},"required":["rating","feedbackText"]},"EventPublicDTO":{"type":"object","properties":{"startDate":{"type":"string","nullable":false},"startTime":{"type":"string","nullable":false},"endTime":{"type":"string","nullable":false},"venueWithArticleIfNeeded":{"type":"string","nullable":false},"address":{"type":"string","nullable":false},"location":{"nullable":true,"description":"Location of event","allOf":[{"$ref":"#/components/schemas/LocationDTO"}]}},"required":["startDate","startTime","endTime","venueWithArticleIfNeeded","address","location"]},"NotificationNavigateUserDTO":{"type":"object","properties":{"type":{"default":"new_match","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"],"type":"string"},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]},"navigateToPerson":{"$ref":"#/components/schemas/UserPublicDTO"},"encounterId":{"type":"string"}},"required":["type","screen","navigateToPerson","encounterId"]},"NotificationSafetyCallMissedDTO":{"type":"object","properties":{"type":{"default":"safety_call_missed","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"],"type":"string"},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]}},"required":["type","screen"]},"NotificationDidYouMeetDTO":{"type":"object","properties":{"type":{"type":"string","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"]},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]},"encounterId":{"type":"string"}},"required":["type","screen","encounterId"]},"NotificationAccountApprovedDTO":{"type":"object","properties":{"type":{"type":"string","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"]},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]}},"required":["type","screen"]},"NotificationGhostReminderDTO":{"type":"object","properties":{"type":{"default":"ghostmode_reminder","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"],"type":"string"},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]}},"required":["type","screen"]},"NotificationNewEventDTO":{"type":"object","properties":{"type":{"default":"new_event","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"],"type":"string"},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]}},"required":["type","screen"]},"NotificationNewMessageDTO":{"type":"object","properties":{"type":{"default":"new_message","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"],"type":"string"},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]}},"required":["type","screen"]},"EmailCodeResponseADTO":{"type":"object","properties":{"timeout":{"type":"number","description":"The timeout when the user can resend a verification code in milliseconds."},"codeIssuedAt":{"format":"date-time","type":"string","description":"Timestamp when the verification code was issued."}},"required":["timeout","codeIssuedAt"]},"BaseNotificationADTO":{"type":"object","properties":{"type":{"type":"string","enum":["new_match","new_event","account_approved","ghostmode_reminder","safetycall_reminder","account_denied","new_message","safety_call_missed","did_you_meet"]},"screen":{"type":"string","enum":["Main_NavigateToApproach","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_FindPeople","Main_Encounters_onTab","Main_Encounters_onTab","Welcome"]}},"required":["type","screen"]}}}}