Skip to content

Commit d23d1e6

Browse files
dzokeszuperaz
andauthored
feat: new endpoint for restoring soft deleted activity (#221)
🎫 Ticket: https://linear.app/stream/issue/XYZ-123 πŸ“‘ Docs: https://github.com/GetStream/docs-content/pull/<id> ### πŸ’‘ Overview ### πŸ“ Implementation notes <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added event handling for restored activities in the feed system, enabling proper recognition and processing of restoration events. * **Style** * Code formatting and structure improvements applied for enhanced consistency. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Zita Szupera <szuperaz@gmail.com>
1 parent 27f61f0 commit d23d1e6

File tree

5 files changed

+83
-1
lines changed

5 files changed

+83
-1
lines changed

β€Žpackages/feeds-client/src/feed/feed.tsβ€Ž

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ export class Feed extends FeedApi {
219219
'user.reactivated': Feed.noop,
220220
'user.updated': Feed.noop,
221221
'feeds.activity.feedback': handleActivityFeedback.bind(this),
222+
'feeds.activity.restored': Feed.noop,
222223
};
223224

224225
protected eventDispatcher: EventDispatcher<WSEvent['type'], WSEvent> =
@@ -872,7 +873,13 @@ export class Feed extends FeedApi {
872873
return response;
873874
}
874875

875-
async unfollow(feedOrFid: Feed | string, options?: Omit<Parameters<typeof this.client.unfollow>[0], 'source' | 'target'>) {
876+
async unfollow(
877+
feedOrFid: Feed | string,
878+
options?: Omit<
879+
Parameters<typeof this.client.unfollow>[0],
880+
'source' | 'target'
881+
>,
882+
) {
876883
const fid = typeof feedOrFid === 'string' ? feedOrFid : feedOrFid.feed;
877884

878885
const response = await this.client.unfollow({

β€Žpackages/feeds-client/src/gen/feeds/FeedsApi.tsβ€Ž

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ import type {
9999
RejectFollowRequest,
100100
RejectFollowResponse,
101101
Response,
102+
RestoreActivityRequest,
103+
RestoreActivityResponse,
102104
SharedLocationResponse,
103105
SharedLocationsResponse,
104106
SingleFollowResponse,
@@ -783,6 +785,30 @@ export class FeedsApi {
783785
return { ...response.body, metadata: response.metadata };
784786
}
785787

788+
async restoreActivity(
789+
request: RestoreActivityRequest & { id: string },
790+
): Promise<StreamResponse<RestoreActivityResponse>> {
791+
const pathParams = {
792+
id: request?.id,
793+
};
794+
const body = {};
795+
796+
const response = await this.apiClient.sendRequest<
797+
StreamResponse<RestoreActivityResponse>
798+
>(
799+
'PUT',
800+
'/api/v2/feeds/activities/{id}/restore',
801+
pathParams,
802+
undefined,
803+
body,
804+
'application/json',
805+
);
806+
807+
decoders.RestoreActivityResponse?.(response.body);
808+
809+
return { ...response.body, metadata: response.metadata };
810+
}
811+
786812
async queryBookmarkFolders(
787813
request?: QueryBookmarkFoldersRequest,
788814
): Promise<StreamResponse<QueryBookmarkFoldersResponse>> {

β€Žpackages/feeds-client/src/gen/model-decoders/decoders.tsβ€Ž

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,17 @@ decoders.ActivityResponse = (input?: Record<string, any>) => {
212212
return decode(typeMappings, input);
213213
};
214214

215+
decoders.ActivityRestoredEvent = (input?: Record<string, any>) => {
216+
const typeMappings: TypeMapping = {
217+
created_at: { type: 'DatetimeType', isSingle: true },
218+
219+
activity: { type: 'ActivityResponse', isSingle: true },
220+
221+
received_at: { type: 'DatetimeType', isSingle: true },
222+
};
223+
return decode(typeMappings, input);
224+
};
225+
215226
decoders.ActivityUnpinnedEvent = (input?: Record<string, any>) => {
216227
const typeMappings: TypeMapping = {
217228
created_at: { type: 'DatetimeType', isSingle: true },
@@ -1785,6 +1796,13 @@ decoders.ReminderResponseData = (input?: Record<string, any>) => {
17851796
return decode(typeMappings, input);
17861797
};
17871798

1799+
decoders.RestoreActivityResponse = (input?: Record<string, any>) => {
1800+
const typeMappings: TypeMapping = {
1801+
activity: { type: 'ActivityResponse', isSingle: true },
1802+
};
1803+
return decode(typeMappings, input);
1804+
};
1805+
17881806
decoders.ReviewQueueItemResponse = (input?: Record<string, any>) => {
17891807
const typeMappings: TypeMapping = {
17901808
created_at: { type: 'DatetimeType', isSingle: true },

β€Žpackages/feeds-client/src/gen/model-decoders/event-decoder-mapping.tsβ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ const eventDecoderMapping: Record<
3434
'feeds.activity.removed_from_feed': (data: Record<string, any>) =>
3535
decoders.ActivityRemovedFromFeedEvent(data),
3636

37+
'feeds.activity.restored': (data: Record<string, any>) =>
38+
decoders.ActivityRestoredEvent(data),
39+
3740
'feeds.activity.unpinned': (data: Record<string, any>) =>
3841
decoders.ActivityUnpinnedEvent(data),
3942

β€Žpackages/feeds-client/src/gen/models/index.tsβ€Ž

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,24 @@ export interface ActivityResponse {
490490
poll?: PollResponseData;
491491
}
492492

493+
export interface ActivityRestoredEvent {
494+
created_at: Date;
495+
496+
fid: string;
497+
498+
activity: ActivityResponse;
499+
500+
custom: Record<string, any>;
501+
502+
type: string;
503+
504+
feed_visibility?: string;
505+
506+
received_at?: Date;
507+
508+
user?: UserResponseCommonFields;
509+
}
510+
493511
export interface ActivitySelectorConfig {
494512
cutoff_time: Date;
495513

@@ -5138,6 +5156,14 @@ export interface RestoreActionRequest {
51385156
decision_reason?: string;
51395157
}
51405158

5159+
export interface RestoreActivityRequest {}
5160+
5161+
export interface RestoreActivityResponse {
5162+
duration: string;
5163+
5164+
activity: ActivityResponse;
5165+
}
5166+
51415167
export interface ReviewQueueItemResponse {
51425168
ai_text_severity: string;
51435169

@@ -6472,6 +6498,7 @@ export type WSClientEvent =
64726498
| ({
64736499
type: 'feeds.activity.removed_from_feed';
64746500
} & ActivityRemovedFromFeedEvent)
6501+
| ({ type: 'feeds.activity.restored' } & ActivityRestoredEvent)
64756502
| ({ type: 'feeds.activity.unpinned' } & ActivityUnpinnedEvent)
64766503
| ({ type: 'feeds.activity.updated' } & ActivityUpdatedEvent)
64776504
| ({ type: 'feeds.bookmark.added' } & BookmarkAddedEvent)
@@ -6522,6 +6549,7 @@ export type WSEvent =
65226549
| ({
65236550
type: 'feeds.activity.removed_from_feed';
65246551
} & ActivityRemovedFromFeedEvent)
6552+
| ({ type: 'feeds.activity.restored' } & ActivityRestoredEvent)
65256553
| ({ type: 'feeds.activity.unpinned' } & ActivityUnpinnedEvent)
65266554
| ({ type: 'feeds.activity.updated' } & ActivityUpdatedEvent)
65276555
| ({ type: 'feeds.bookmark.added' } & BookmarkAddedEvent)

0 commit comments

Comments
Β (0)