Skip to content

Commit 15985e1

Browse files
committed
feat: set picture item perspective via gRPC
1 parent 806c0d3 commit 15985e1

File tree

7 files changed

+339
-38
lines changed

7 files changed

+339
-38
lines changed

src/app/moder/pictures/item/item.component.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import {Component} from '@angular/core';
22
import {ActivatedRoute, Router} from '@angular/router';
3-
import {APIIP, APIUser, DeleteSimilarRequest, ItemFields, ItemRequest, ItemType, PictureIDRequest} from '@grpc/spec.pb';
3+
import {
4+
APIIP,
5+
APIUser,
6+
DeleteSimilarRequest,
7+
ItemFields,
8+
ItemRequest,
9+
ItemType,
10+
PictureIDRequest,
11+
SetPictureItemPerspectiveRequest,
12+
} from '@grpc/spec.pb';
413
import {APIItem} from '@grpc/spec.pb';
514
import {ItemsClient, PicturesClient} from '@grpc/spec.pbsc';
615
import {GrpcStatusEvent} from '@ngx-grpc/common';
@@ -15,6 +24,8 @@ import {BehaviorSubject, EMPTY, Observable, combineLatest, of, throwError} from
1524
import {catchError, distinctUntilChanged, map, shareReplay, switchMap, tap} from 'rxjs/operators';
1625
import {sprintf} from 'sprintf-js';
1726

27+
import {ToastsService} from '../../../toasts/toasts.service';
28+
1829
interface LastItemInfo {
1930
hasItem: boolean;
2031
item: APIItem | null;
@@ -173,6 +184,7 @@ export class ModerPicturesItemComponent {
173184
private readonly itemsClient: ItemsClient,
174185
private readonly userService: UserService,
175186
private readonly picturesClient: PicturesClient,
187+
private readonly toastService: ToastsService,
176188
) {
177189
this.monthOptions = [
178190
{
@@ -208,8 +220,23 @@ export class ModerPicturesItemComponent {
208220
}
209221
}
210222

211-
protected savePerspective(perspectiveID: null | number, item: APIPictureItem) {
212-
this.pictureItemService.setPerspective$(item.picture_id, item.item_id, item.type, perspectiveID).subscribe();
223+
protected savePerspective(perspectiveId: null | number, item: APIPictureItem) {
224+
this.picturesClient
225+
.setPictureItemPerspective(
226+
new SetPictureItemPerspectiveRequest({
227+
itemId: '' + item.item_id,
228+
perspectiveId: perspectiveId || undefined,
229+
pictureId: '' + item.picture_id,
230+
type: item.type,
231+
}),
232+
)
233+
.pipe(
234+
catchError((error: unknown) => {
235+
this.toastService.handleError(error);
236+
return EMPTY;
237+
}),
238+
)
239+
.subscribe();
213240
}
214241

215242
protected pictureVoted() {

src/app/moder/pictures/item/move/move.component.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
import {Component, OnInit} from '@angular/core';
22
import {FormControl} from '@angular/forms';
33
import {ActivatedRoute, Router} from '@angular/router';
4-
import {APIItem, ItemFields, ItemType, ListItemsRequest, Pages, PictureItemType} from '@grpc/spec.pb';
5-
import {ItemsClient} from '@grpc/spec.pbsc';
4+
import {
5+
APIItem,
6+
ItemFields,
7+
ItemType,
8+
ListItemsRequest,
9+
Pages,
10+
PictureItemType,
11+
SetPictureItemPerspectiveRequest,
12+
} from '@grpc/spec.pb';
13+
import {ItemsClient, PicturesClient} from '@grpc/spec.pbsc';
614
import {APIItemParentGetResponse, ItemParentService} from '@services/item-parent';
715
import {LanguageService} from '@services/language';
816
import {PageEnvService} from '@services/page-env.service';
917
import {PictureItemService} from '@services/picture-item';
10-
import {Observable, combineLatest, of} from 'rxjs';
11-
import {debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap} from 'rxjs/operators';
18+
import {EMPTY, Observable, combineLatest, of} from 'rxjs';
19+
import {catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap} from 'rxjs/operators';
1220

1321
import {chunk} from '../../../../chunk';
22+
import {ToastsService} from '../../../../toasts/toasts.service';
1423

1524
export interface PictureItemMoveSelection {
1625
itemId: string;
@@ -330,6 +339,8 @@ export class ModerPicturesItemMoveComponent implements OnInit {
330339
private readonly pageEnv: PageEnvService,
331340
private readonly itemsClient: ItemsClient,
332341
private readonly languageService: LanguageService,
342+
private readonly picturesClient: PicturesClient,
343+
private readonly toastService: ToastsService,
333344
) {}
334345

335346
ngOnInit(): void {
@@ -354,7 +365,18 @@ export class ModerPicturesItemMoveComponent implements OnInit {
354365
return of(null);
355366
}
356367

357-
return this.pictureItemService.setPerspective$(id, +dstItemID, srcType, dstPerspectiveID);
368+
return this.picturesClient.setPictureItemPerspective(
369+
new SetPictureItemPerspectiveRequest({
370+
itemId: dstItemID,
371+
perspectiveId: dstPerspectiveID || undefined,
372+
pictureId: '' + id,
373+
type: srcType,
374+
}),
375+
);
376+
}),
377+
catchError((error: unknown) => {
378+
this.toastService.handleError(error);
379+
return EMPTY;
358380
}),
359381
)
360382
.subscribe(() => {

src/app/picture/picture.component.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ import {
66
CommentsType,
77
CommentsUnSubscribeRequest,
88
PicturesViewRequest,
9+
SetPictureItemPerspectiveRequest,
910
} from '@grpc/spec.pb';
1011
import {CommentsClient, PicturesClient} from '@grpc/spec.pbsc';
1112
import {ACLService, Privilege, Resource} from '@services/acl.service';
1213
import {AuthService} from '@services/auth.service';
1314
import {APIItem} from '@services/item';
1415
import {APIPicture, PictureService} from '@services/picture';
15-
import {APIPictureItem, PictureItemService} from '@services/picture-item';
16+
import {APIPictureItem} from '@services/picture-item';
1617
import {UserService} from '@services/user';
17-
import {BehaviorSubject, Observable, of} from 'rxjs';
18-
import {map, switchMap} from 'rxjs/operators';
18+
import {BehaviorSubject, EMPTY, Observable, of} from 'rxjs';
19+
import {catchError, map, switchMap} from 'rxjs/operators';
20+
21+
import {ToastsService} from '../toasts/toasts.service';
1922

2023
@Component({
2124
selector: 'app-picture',
@@ -69,16 +72,31 @@ export class PictureComponent {
6972
private readonly auth: AuthService,
7073
private readonly pictureService: PictureService,
7174
private readonly router: Router,
72-
private readonly pictureItemService: PictureItemService,
7375
private readonly commentsGrpc: CommentsClient,
7476
private readonly picturesClient: PicturesClient,
7577
private readonly userService: UserService,
78+
private readonly toastService: ToastsService,
7679
) {
7780
this.location = location;
7881
}
7982

8083
protected savePerspective(perspectiveID: null | number, item: APIPictureItem) {
81-
this.pictureItemService.setPerspective$(item.picture_id, item.item_id, item.type, perspectiveID).subscribe();
84+
this.picturesClient
85+
.setPictureItemPerspective(
86+
new SetPictureItemPerspectiveRequest({
87+
itemId: '' + item.item_id,
88+
perspectiveId: perspectiveID || undefined,
89+
pictureId: '' + item.picture_id,
90+
type: item.type,
91+
}),
92+
)
93+
.pipe(
94+
catchError((error: unknown) => {
95+
this.toastService.handleError(error);
96+
return EMPTY;
97+
}),
98+
)
99+
.subscribe();
82100
}
83101

84102
protected pictureVoted() {

src/app/services/picture-item.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,6 @@ export interface APIPictureItem {
4343
export class PictureItemService {
4444
constructor(private readonly api: APIService) {}
4545

46-
public setPerspective$(
47-
pictureId: number,
48-
itemId: number,
49-
type: number,
50-
perspectiveId: null | number,
51-
): Observable<void> {
52-
const url = 'picture-item/' + pictureId + '/' + itemId + '/' + type;
53-
return this.api.request<void>('PUT', url, {
54-
body: {
55-
perspective_id: perspectiveId ? perspectiveId.toString() : null,
56-
},
57-
});
58-
}
59-
6046
public create$(pictureId: number, itemId: string, type: number, data: APIPictureItemPostData): Observable<void> {
6147
return this.api.request<void>('POST', 'picture-item/' + pictureId + '/' + itemId + '/' + type, {body: data});
6248
}

src/app/thumbnail/thumbnail/thumbnail.component.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import {Component, EventEmitter, Input, Output} from '@angular/core';
2-
import {APIUser, Perspective} from '@grpc/spec.pb';
2+
import {APIUser, Perspective, SetPictureItemPerspectiveRequest} from '@grpc/spec.pb';
3+
import {PicturesClient} from '@grpc/spec.pbsc';
34
import {ACLService, Privilege, Resource} from '@services/acl.service';
45
import {APIPicture} from '@services/picture';
5-
import {PictureItemService} from '@services/picture-item';
66
import {UserService} from '@services/user';
77
import {getPerspectiveTranslation} from '@utils/translations';
8-
import {BehaviorSubject, Observable, of} from 'rxjs';
9-
import {switchMap} from 'rxjs/operators';
8+
import {BehaviorSubject, EMPTY, Observable, of} from 'rxjs';
9+
import {catchError, switchMap} from 'rxjs/operators';
1010

1111
import {APIPerspectiveService} from '../../api/perspective/perspective.service';
12+
import {ToastsService} from '../../toasts/toasts.service';
1213

1314
interface ThumbnailAPIPicture extends APIPicture {
1415
selected?: boolean;
@@ -38,19 +39,28 @@ export class ThumbnailComponent {
3839

3940
constructor(
4041
private readonly perspectiveService: APIPerspectiveService,
41-
private readonly pictureItemService: PictureItemService,
4242
private readonly acl: ACLService,
4343
private readonly userService: UserService,
44+
private readonly picturesClient: PicturesClient,
45+
private readonly toastService: ToastsService,
4446
) {}
4547

4648
protected savePerspective(picture: ThumbnailAPIPicture) {
4749
if (picture.perspective_item) {
48-
this.pictureItemService
49-
.setPerspective$(
50-
picture.id,
51-
picture.perspective_item.item_id,
52-
picture.perspective_item.type,
53-
picture.perspective_item.perspective_id,
50+
this.picturesClient
51+
.setPictureItemPerspective(
52+
new SetPictureItemPerspectiveRequest({
53+
itemId: '' + picture.perspective_item.item_id,
54+
perspectiveId: picture.perspective_item.perspective_id,
55+
pictureId: '' + picture.id,
56+
type: picture.perspective_item.type,
57+
}),
58+
)
59+
.pipe(
60+
catchError((error: unknown) => {
61+
this.toastService.handleError(error);
62+
return EMPTY;
63+
}),
5464
)
5565
.subscribe();
5666
}

0 commit comments

Comments
 (0)