Allmine API

Kullanıcı availability — client migration

~5 dkMobil / WebKararlı

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 available dö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

EndpointMethodAuthRequest DTOResponse DTODegisim
/api/v1/users/availability-statusPATCHUser JWTUpdateAvailabilityStatusDtoUserAvailabilityStatusResponseDtoKullanı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:

EndpointMethodResponse pathDegisim
/api/v1/users/meGETdata.availabilityStatusMevcut kullanıcı profilinde durum döner.
/api/v1/users/profilePATCHdata.availabilityStatusProfil guncelleme response'unda durum döner.
/api/v1/users/profilePUTdata.availabilityStatusTam profil guncelleme response'unda durum döner.
/api/v1/users/profile/photoPATCHdata.availabilityStatusProfil fotografi guncelleme response'unda durum döner.
/api/v1/users/:idGETdata.availabilityStatusAdmin kullanıcı detayinda durum döner.
/api/v1/usersGETdata.users[].availabilityStatusAdmin kullanıcı listesinde durum döner.
/api/v1/onboarding/step-1 ... /api/v1/onboarding/step-7POSTdata.availabilityStatusOnboarding step response'larinda durum döner.

Client aksiyonu:

  • UserResponseDto modeline availabilityStatus?: UserAvailabilityStatus ekleyin.
  • UI'da eksik gelirse fallback available kullanın.

PublicUserProfileDto

Eklenen alan:

availabilityStatus: UserAvailabilityStatus;

Bagli endpointler:

EndpointMethodResponse pathDegisim
/api/v1/users/profile/:userIdGETdata.availabilityStatusPublic profil detayinda durum döner.
/api/v1/users/profile/username/:usernameGETdata.availabilityStatusUsername ile public profil detayinda durum döner.

Client aksiyonu:

  • Profil ekraninda durum badge/switch okumasi için availabilityStatus kullanın.
  • Bu alan kullanıcının online/offline presence'i değildir.

UserSummaryDto

Eklenen alan:

availabilityStatus?: UserAvailabilityStatus;

Dogrudan bagli endpointler:

EndpointMethodResponse pathDegisim
/api/v1/users/recommended-for-youGETdata[].availabilityStatusOnerilen kullanıcı kartlarinda durum döner. Busy kullanıcılar filtrelenmez.
/api/v1/users/searchGETdata.list[].availabilityStatusV1 kullanıcı arama kartlarinda durum döner. Busy kullanıcılar filtrelenmez.

Nested olarak etkilenen endpointler:

Parent DTOEndpointlerResponse pathDegisim
LiveStreamResponseDtoTüm LiveStreamResponseDto donen live stream endpointleridata.creator.availabilityStatus, data.guests[].availabilityStatusYayin 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/joindata.liveStream.creator.availabilityStatus, data.liveStream.guests[].availabilityStatusJoin response'unda nested live stream user kartlarinda durum döner.
CatchStreamerResponseDto/api/v1/live-stream/catch-streamersdata[].creator.availabilityStatusCatch streamer kartinda creator durumu döner.
LiveStreamGiftHistoryItemDto/api/v1/live-stream/:id/gift-historydata.list[].sender.availabilityStatusGift history sender user summary içinde durum döner.

LiveStreamResponseDto donen baslica endpointler:

  • GET /api/v1/live-stream
  • GET /api/v1/live-stream/search
  • GET /api/v1/live-stream/active
  • GET /api/v1/live-stream/whats-live-now
  • GET /api/v1/live-stream/ready-to-fund
  • GET /api/v1/live-stream/featured
  • GET /api/v1/live-stream/my-active-stream
  • GET /api/v1/live-stream/funded
  • GET /api/v1/live-stream/guest-streams
  • GET /api/v1/live-stream/upcoming-live-streams
  • GET /api/v1/live-stream/my-past-streams
  • GET /api/v2/live-stream/my-past-streams
  • GET /api/v1/live-stream/past-streams
  • GET /api/v2/live-stream/past-streams
  • GET /api/v1/live-stream/user/:userId/active-stream
  • GET /api/v1/live-stream/user/:userId/past-streams
  • GET /api/v2/live-stream/user/:userId/past-streams
  • DELETE /api/v1/live-stream/:id
  • POST /api/v1/live-stream/:id/cancel
  • PATCH /api/v1/live-stream/:id/replay-settings
  • GET /api/v1/live-stream/:id
  • POST /api/v1/live-stream/:id/fund

Client aksiyonu:

  • Ortak UserSummaryDto tipine availabilityStatus?: UserAvailabilityStatus ekleyin.
  • Bu değişiklik live stream kartlarinda nested creator ve guests tiplerine otomatik yayilir.

InvitableUserSummaryDto

InvitableUserSummaryDto, UserSummaryDto extend ettigi için alan inherited gelir:

availabilityStatus?: UserAvailabilityStatus;

Bagli endpoint:

EndpointMethodResponse pathDegisim
/api/v1/users/search-invitableGETdata[].availabilityStatusDavet 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:

EndpointMethodResponse pathDegisim
/api/v2/users/searchGETdata.list[].availabilityStatusV2 arama kartlarinda durum döner. Busy kullanıcılar filtrelenmez.

Client aksiyonu:

  • SearchUserV2Dto tipine alani ekleyin.
  • Mevcut profilePhoto96Url / activeLiveStream davranisi degismedi.

ChatMemberResponseDto

Eklenen alan:

availabilityStatus?: UserAvailabilityStatus;

Bagli endpointler:

EndpointMethodResponse pathDegisim
/api/v1/chatsGETdata[].members[].availabilityStatusChat listesindeki kullanıcı kartlarinda durum döner. Busy kullanıcılar chat listesinden cikarilmaz.
/api/v1/messages/chat/:chatIdGETdata.participants[].availabilityStatusMesaj listesi response'undaki chat katilimcilari ayni DTO'yu kullandigi için durum döner.

Not:

  • Pending deletion durumundaki kullanıcılarda username ve profilePhoto maskelenmeye devam eder.
  • availabilityStatus eksik/eski kayitlarda available olarak normalize edilir.

Client aksiyonu:

  • Chat member modeline availabilityStatus?: UserAvailabilityStatus ekleyin.
  • Chat listesinde gösterilecek busy/available badge'i için member.availabilityStatus ?? 'available' kullanın.

FollowUserSummaryDto

Eklenen alan:

availabilityStatus?: UserAvailabilityStatus;

Bagli endpointler:

EndpointMethodResponse pathDegisim
/api/v1/follow/followers/:userIdGETdata.users[].availabilityStatusFollower user kartlarinda durum döner.
/api/v1/follow/following/:userIdGETdata.users[].availabilityStatusFollowing user kartlarinda durum döner.
/api/v1/follow/mutuals/:userIdGETdata.users[].availabilityStatusMutual user kartlarinda durum döner.
/api/v1/follow/me/followersGETdata.users[].availabilityStatusKendi follower listesinde durum döner.
/api/v1/follow/me/followingGETdata.users[].availabilityStatusKendi following listesinde durum döner.
/api/v1/follow/me/mutualsGETdata.users[].availabilityStatusKendi mutual listesinde durum döner.

Client aksiyonu:

  • Follow list item modeline availabilityStatus?: UserAvailabilityStatus ekleyin.
  • isFollowing, followersCount, followingCount, expertise alanlari degismedi.

MostWatchedCreatorsUserSummaryDto

Eklenen alan:

availabilityStatus?: UserAvailabilityStatus;

Bagli endpoint:

EndpointMethodResponse pathDegisim
/api/v1/live-stream/most-watched-creatorsGETdata[].availabilityStatusMost watched creator kartlarinda durum döner.

Client aksiyonu:

  • Most watched creators liste item tipine alani ekleyin.
  • isFollowing davranisi degismedi.

Client Migration Checklist

  1. Ortak enum ekleyin:
export type UserAvailabilityStatus = 'available' | 'busy';
  1. Asagidaki client modellerine availabilityStatus ekleyin:
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;
};
  1. UI fallback:
const availabilityStatus = user.availabilityStatus ?? 'available';
  1. Kullanıcı switch'i için mutation ekleyin:
type UpdateAvailabilityStatusDto = {
  availabilityStatus: UserAvailabilityStatus;
};

async function updateAvailabilityStatus(body: UpdateAvailabilityStatusDto) {
  return api.patch('/users/availability-status', body);
}
  1. 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 _id ile patch edin.

Geriye Donuk Uyumluluk

  • Backend eski kullanıcılar için availabilityStatus yoksa available normalize 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.

On this page