

| # | Database Collection | Description |
| 1 | friend_friend_requests | • id: uuid • recipient_profile_id: ObjectId • requester_profile_id: ObjectId • status: String "PENDING"|"ACCEPTED"|"DECLINED" • message: String • feedback: String • created_at: Date • created_by: ObjectId • modified_at: Date • modified_by: ObjectId |
| 2 | friend_friends | • id: uuid • profile_id: ObjectId • friend_profile_id: ObjectId • created_at: Date • created_by: ObjectId • modified_at: Date • modified_by: ObjectId • deleted_at: Date • deleted_by: ObjectId |

| # | Path | Description | Method | Headers | Request | Response |
| 1 | profile/internal/v1/{userId}/friend-requests | View pending friend requests | GET | • x-server-key | N/A | { items: [ { id: String, recipientProfileId: ObjectId, requesterProfileId: ObjectId, status: String "PENDING"|"ACCEPTED"|"DECLINED", message: String, feedback: String, createdAt: Date, createdBy: ObjectId, modifiedAt: Date, modifiedBy: ObjectId } ] paging: { cursors: { before: String, after: String } }} |
| 2 | profile/internal/v1/{userId}/friend-requests | Send personalized friend request | POST | • x-server-key | { recipientProfileId: String, message?: String, } | { id: String, recipientProfileId: ObjectId, requesterProfileId: ObjectId, status: "PENDING", message: String, feedback: String, createdAt: Date, createdBy: ObjectId, modifiedAt: Date, modifiedBy: ObjectId} |
| 3 | profile/internal/v1/{userId}/friend-requests/{requestId}/accept | Accept friend request | PUT | • x-server-key | N/A | SuccessResponseDTO |
| 4 | profile/internal/v1/{userId}/friend-requests/{requestId}/decline | Decline friend request | PUT | • x-server-key | { feedback?: String } | SuccessResponseDTO |
| 5 | profile/internal/v1/{userId}/friends | View all friends | GET | • x-server-key | N/A | { items: [ { id: String, profileId: ObjectId friendProfileId: ObjectId createdAt: Date, createdBy: ObjectId, modifiedAt: Date, modifiedBy: ObjectId, deletedAt: Date, deletedBy: ObjectId } ] paging: { cursors: { before: String, after: String } }} |
| 6 | profile/internal/v1/{userId}/friends/{friendProfileId} | Remove a friend | DELETE | • x-server-key | N/A | SuccessResponseDTO |
| 7 | profile/cms/v1/{userId}/friend-requests | View all friend requests | GET | • x-access-token | N/A | { items: [ { id: String, recipientProfileId: ObjectId, requesterProfileId: ObjectId, status: String "PENDING"|"ACCEPTED"|"DECLINED", message: String, feedback: String, createdAt: Date, createdBy: ObjectId, modifiedAt: Date, modifiedBy: ObjectId } ] paging: { cursors: { before: String, after: String } }} |
| 8 | profile/cms/v1/{userId}/friends | View all friends | GET | • x-access-token | N/A | { items: [ { id: String, profileId: ObjectId friendProfileId: ObjectId createdAt: Date, createdBy: ObjectId, modifiedAt: Date, modifiedBy: ObjectId, deletedAt: Date, deletedBy: ObjectId } ] paging: { cursors: { before: String, after: String } }} |



Beiryu
Contributor

After facing challenges in job hunting and going through a rigorous 5-round interview process at Gameloft, I found myself in a professional environment that values work-life balance, documentation, and team bonding. The experience at Gameloft, from the welcoming first day to memorable team trips to Vinh Hy and Cam Ranh, has shown me that a workplace can be more than just about work - it can be a place where lasting relationships are built and professional growth is nurtured.
Beiryu
Contributor