Kullanıcı availability — client migration
Availability status socket ve REST client güncellemesi
User Availability Status - Mobile/Web Migration Dokumani
Migration rehberi
Yapılandırma sırası için Migration şablonu. Yeni düzenlemelerde Amaç → Önkoşullar → Endpoint → Request/Response → Hata kodları → Client adımları → İlgili sayfalar bölümlerini tercih edin.
Bu doküman, kullanıcı busy / available switch'i için backend response sozlesmesindeki DTO değişikliklerini ve client migration noktalarini açıklar.
Ozet
- Yeni enum:
UserAvailabilityStatus = 'available' | 'busy' - Yeni kalici user alani:
availabilityStatus - Varsayilan deger:
available - Eksik/eski kayitlarda backend response mapper'lari
availabledöner. - Bu alan sadece gösterim amaclidir; search, recommended, invite veya live stream listelerinde filtreleme yapmaz.
- Tüm HTTP cevaplari global
BaseResponseDto<T>wrapper içindedir.
export type UserAvailabilityStatus = 'available' | 'busy';Yeni Endpoint
| Endpoint | Method | Auth | Request DTO | Response DTO | Degisim |
|---|---|---|---|---|---|
/api/v1/users/availability-status | PATCH | User JWT | UpdateAvailabilityStatusDto | UserAvailabilityStatusResponseDto | Kullanıcı kendi durumunu available veya busy olarak gunceller. |
Request
export type UpdateAvailabilityStatusDto = {
availabilityStatus: UserAvailabilityStatus;
};Response
export type UserAvailabilityStatusResponseDto = {
_id: string;
availabilityStatus: UserAvailabilityStatus;
updatedAt: string; // ISO date
};
export type BaseResponseDto<T> = {
isSuccess: boolean;
statusCode: number;
data: T;
errors?: string[];
timestamp: string;
};Ornek
PATCH /api/v1/users/availability-status
Authorization: Bearer <JWT>
Content-Type: application/json
{
"availabilityStatus": "busy"
}{
"isSuccess": true,
"statusCode": 200,
"data": {
"_id": "507f1f77bcf86cd799439011",
"availabilityStatus": "busy",
"updatedAt": "2026-05-06T10:30:00.000Z"
},
"errors": [],
"timestamp": "2026-05-06T10:30:00.000Z"
}Degisen DTO'lar
UserResponseDto
Eklenen alan:
availabilityStatus?: UserAvailabilityStatus;Bagli endpointler:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/users/me | GET | data.availabilityStatus | Mevcut kullanıcı profilinde durum döner. |
/api/v1/users/profile | PATCH | data.availabilityStatus | Profil guncelleme response'unda durum döner. |
/api/v1/users/profile | PUT | data.availabilityStatus | Tam profil guncelleme response'unda durum döner. |
/api/v1/users/profile/photo | PATCH | data.availabilityStatus | Profil fotografi guncelleme response'unda durum döner. |
/api/v1/users/:id | GET | data.availabilityStatus | Admin kullanıcı detayinda durum döner. |
/api/v1/users | GET | data.users[].availabilityStatus | Admin kullanıcı listesinde durum döner. |
/api/v1/onboarding/step-1 ... /api/v1/onboarding/step-7 | POST | data.availabilityStatus | Onboarding step response'larinda durum döner. |
Client aksiyonu:
UserResponseDtomodelineavailabilityStatus?: UserAvailabilityStatusekleyin.- UI'da eksik gelirse fallback
availablekullanın.
PublicUserProfileDto
Eklenen alan:
availabilityStatus: UserAvailabilityStatus;Bagli endpointler:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/users/profile/:userId | GET | data.availabilityStatus | Public profil detayinda durum döner. |
/api/v1/users/profile/username/:username | GET | data.availabilityStatus | Username ile public profil detayinda durum döner. |
Client aksiyonu:
- Profil ekraninda durum badge/switch okumasi için
availabilityStatuskullanın. - Bu alan kullanıcının online/offline presence'i değildir.
UserSummaryDto
Eklenen alan:
availabilityStatus?: UserAvailabilityStatus;Dogrudan bagli endpointler:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/users/recommended-for-you | GET | data[].availabilityStatus | Onerilen kullanıcı kartlarinda durum döner. Busy kullanıcılar filtrelenmez. |
/api/v1/users/search | GET | data.list[].availabilityStatus | V1 kullanıcı arama kartlarinda durum döner. Busy kullanıcılar filtrelenmez. |
Nested olarak etkilenen endpointler:
| Parent DTO | Endpointler | Response path | Degisim |
|---|---|---|---|
LiveStreamResponseDto | Tüm LiveStreamResponseDto donen live stream endpointleri | data.creator.availabilityStatus, data.guests[].availabilityStatus | Yayin creator/guest user kartlarinda durum döner. |
LiveStreamWithTokenResponseDto | /api/v1/live-stream/join-as-creator, /api/v1/live-stream/join-as-guest, /api/v1/live-stream/join | data.liveStream.creator.availabilityStatus, data.liveStream.guests[].availabilityStatus | Join response'unda nested live stream user kartlarinda durum döner. |
CatchStreamerResponseDto | /api/v1/live-stream/catch-streamers | data[].creator.availabilityStatus | Catch streamer kartinda creator durumu döner. |
LiveStreamGiftHistoryItemDto | /api/v1/live-stream/:id/gift-history | data.list[].sender.availabilityStatus | Gift history sender user summary içinde durum döner. |
LiveStreamResponseDto donen baslica endpointler:
GET /api/v1/live-streamGET /api/v1/live-stream/searchGET /api/v1/live-stream/activeGET /api/v1/live-stream/whats-live-nowGET /api/v1/live-stream/ready-to-fundGET /api/v1/live-stream/featuredGET /api/v1/live-stream/my-active-streamGET /api/v1/live-stream/fundedGET /api/v1/live-stream/guest-streamsGET /api/v1/live-stream/upcoming-live-streamsGET /api/v1/live-stream/my-past-streamsGET /api/v2/live-stream/my-past-streamsGET /api/v1/live-stream/past-streamsGET /api/v2/live-stream/past-streamsGET /api/v1/live-stream/user/:userId/active-streamGET /api/v1/live-stream/user/:userId/past-streamsGET /api/v2/live-stream/user/:userId/past-streamsDELETE /api/v1/live-stream/:idPOST /api/v1/live-stream/:id/cancelPATCH /api/v1/live-stream/:id/replay-settingsGET /api/v1/live-stream/:idPOST /api/v1/live-stream/:id/fund
Client aksiyonu:
- Ortak
UserSummaryDtotipineavailabilityStatus?: UserAvailabilityStatusekleyin. - Bu değişiklik live stream kartlarinda nested
creatorvegueststiplerine otomatik yayilir.
InvitableUserSummaryDto
InvitableUserSummaryDto, UserSummaryDto extend ettigi için alan inherited gelir:
availabilityStatus?: UserAvailabilityStatus;Bagli endpoint:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/users/search-invitable | GET | data[].availabilityStatus | Davet edilebilir kullanıcı kartlarinda durum döner. Busy kullanıcılar listeden cikarilmaz. |
Client aksiyonu:
- Davet listelerinde busy görünümü UI tarafında gösterilebilir.
- Backend busy kullanıcıyi davet listesinden filtrelemez.
SearchUserV2Dto
Eklenen alan:
availabilityStatus?: UserAvailabilityStatus;Bagli endpoint:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v2/users/search | GET | data.list[].availabilityStatus | V2 arama kartlarinda durum döner. Busy kullanıcılar filtrelenmez. |
Client aksiyonu:
SearchUserV2Dtotipine alani ekleyin.- Mevcut
profilePhoto96Url/activeLiveStreamdavranisi degismedi.
ChatMemberResponseDto
Eklenen alan:
availabilityStatus?: UserAvailabilityStatus;Bagli endpointler:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/chats | GET | data[].members[].availabilityStatus | Chat listesindeki kullanıcı kartlarinda durum döner. Busy kullanıcılar chat listesinden cikarilmaz. |
/api/v1/messages/chat/:chatId | GET | data.participants[].availabilityStatus | Mesaj listesi response'undaki chat katilimcilari ayni DTO'yu kullandigi için durum döner. |
Not:
- Pending deletion durumundaki kullanıcılarda
usernameveprofilePhotomaskelenmeye devam eder. availabilityStatuseksik/eski kayitlardaavailableolarak normalize edilir.
Client aksiyonu:
- Chat member modeline
availabilityStatus?: UserAvailabilityStatusekleyin. - Chat listesinde gösterilecek busy/available badge'i için
member.availabilityStatus ?? 'available'kullanın.
FollowUserSummaryDto
Eklenen alan:
availabilityStatus?: UserAvailabilityStatus;Bagli endpointler:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/follow/followers/:userId | GET | data.users[].availabilityStatus | Follower user kartlarinda durum döner. |
/api/v1/follow/following/:userId | GET | data.users[].availabilityStatus | Following user kartlarinda durum döner. |
/api/v1/follow/mutuals/:userId | GET | data.users[].availabilityStatus | Mutual user kartlarinda durum döner. |
/api/v1/follow/me/followers | GET | data.users[].availabilityStatus | Kendi follower listesinde durum döner. |
/api/v1/follow/me/following | GET | data.users[].availabilityStatus | Kendi following listesinde durum döner. |
/api/v1/follow/me/mutuals | GET | data.users[].availabilityStatus | Kendi mutual listesinde durum döner. |
Client aksiyonu:
- Follow list item modeline
availabilityStatus?: UserAvailabilityStatusekleyin. isFollowing,followersCount,followingCount,expertisealanlari degismedi.
MostWatchedCreatorsUserSummaryDto
Eklenen alan:
availabilityStatus?: UserAvailabilityStatus;Bagli endpoint:
| Endpoint | Method | Response path | Degisim |
|---|---|---|---|
/api/v1/live-stream/most-watched-creators | GET | data[].availabilityStatus | Most watched creator kartlarinda durum döner. |
Client aksiyonu:
- Most watched creators liste item tipine alani ekleyin.
isFollowingdavranisi degismedi.
Client Migration Checklist
- Ortak enum ekleyin:
export type UserAvailabilityStatus = 'available' | 'busy';- Asagidaki client modellerine
availabilityStatusekleyin:
type UserResponseDto = {
availabilityStatus?: UserAvailabilityStatus;
};
type PublicUserProfileDto = {
availabilityStatus: UserAvailabilityStatus;
};
type UserSummaryDto = {
availabilityStatus?: UserAvailabilityStatus;
};
type SearchUserV2Dto = {
availabilityStatus?: UserAvailabilityStatus;
};
type ChatMemberResponseDto = {
availabilityStatus?: UserAvailabilityStatus;
};
type FollowUserSummaryDto = {
availabilityStatus?: UserAvailabilityStatus;
};
type MostWatchedCreatorsUserSummaryDto = {
availabilityStatus?: UserAvailabilityStatus;
};- UI fallback:
const availabilityStatus = user.availabilityStatus ?? 'available';- Kullanıcı switch'i için mutation ekleyin:
type UpdateAvailabilityStatusDto = {
availabilityStatus: UserAvailabilityStatus;
};
async function updateAvailabilityStatus(body: UpdateAvailabilityStatusDto) {
return api.patch('/users/availability-status', body);
}- Cache invalidation onerisi:
- Basarili switch sonrasi current user/profile cache'i invalidate edin.
- Search/recommended/follow/live-stream/chat listelerinde durum gösteriliyorsa ilgili listeleri refetch edin veya local cache'teki kullanıcı kartini
_idile patch edin.
Geriye Donuk Uyumluluk
- Backend eski kullanıcılar için
availabilityStatusyoksaavailablenormalize eder. - Yeni alan response'a ekleme seklindedir; mevcut alanlarin adi, tipi ve nullability'si degismedi.
- Busy kullanıcılar backend tarafında listelerden cikarilmaz ve davet akisini bloklamaz.
- Bu alan realtime socket presence değildir; kullanıcı manuel switch ettiginde değişir.