

| # | 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

Xin chào các bạn, hôm nay mình sẽ chia sẻ với các bạn về Snowflake - một nền tảng dữ liệu đám mây mà mình đã có cơ hội làm việc và triển khai trong các dự án gần đây. Mình sẽ giải thích về Snowflake, lý do tại sao nó lại quan trọng trong môi trường production, và chia sẻ một số kinh nghiệm thực tế khi làm việc với Snowflake và AWS.
Beiryu
Contributor