refactor(server): plural endpoints (#9667)

This commit is contained in:
Jason Rasmussen 2024-05-22 13:24:57 -04:00 committed by GitHub
parent 6a4c2e97c0
commit 202745f14b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
36 changed files with 367 additions and 362 deletions

View file

@ -14,7 +14,7 @@ import { app, asBearerAuth, utils } from 'src/utils';
import request from 'supertest'; import request from 'supertest';
import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
describe('/activity', () => { describe('/activities', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let nonOwner: LoginResponseDto; let nonOwner: LoginResponseDto;
let asset: AssetFileUploadResponseDto; let asset: AssetFileUploadResponseDto;
@ -45,22 +45,24 @@ describe('/activity', () => {
await utils.resetDatabase(['activity']); await utils.resetDatabase(['activity']);
}); });
describe('GET /activity', () => { describe('GET /activities', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/activity'); const { status, body } = await request(app).get('/activities');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should require an albumId', async () => { it('should require an albumId', async () => {
const { status, body } = await request(app).get('/activity').set('Authorization', `Bearer ${admin.accessToken}`); const { status, body } = await request(app)
.get('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(400); expect(status).toEqual(400);
expect(body).toEqual(errorDto.badRequest(expect.arrayContaining(['albumId must be a UUID']))); expect(body).toEqual(errorDto.badRequest(expect.arrayContaining(['albumId must be a UUID'])));
}); });
it('should reject an invalid albumId', async () => { it('should reject an invalid albumId', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: uuidDto.invalid }) .query({ albumId: uuidDto.invalid })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(400); expect(status).toEqual(400);
@ -69,7 +71,7 @@ describe('/activity', () => {
it('should reject an invalid assetId', async () => { it('should reject an invalid assetId', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: uuidDto.notFound, assetId: uuidDto.invalid }) .query({ albumId: uuidDto.notFound, assetId: uuidDto.invalid })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(400); expect(status).toEqual(400);
@ -78,7 +80,7 @@ describe('/activity', () => {
it('should start off empty', async () => { it('should start off empty', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id }) .query({ albumId: album.id })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([]); expect(body).toEqual([]);
@ -102,7 +104,7 @@ describe('/activity', () => {
]); ]);
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id }) .query({ albumId: album.id })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(200); expect(status).toEqual(200);
@ -121,7 +123,7 @@ describe('/activity', () => {
]); ]);
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id, type: 'comment' }) .query({ albumId: album.id, type: 'comment' })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(200); expect(status).toEqual(200);
@ -140,7 +142,7 @@ describe('/activity', () => {
]); ]);
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id, type: 'like' }) .query({ albumId: album.id, type: 'like' })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(200); expect(status).toEqual(200);
@ -152,7 +154,7 @@ describe('/activity', () => {
const reaction = await createActivity({ albumId: album.id, type: ReactionType.Like }); const reaction = await createActivity({ albumId: album.id, type: ReactionType.Like });
const response1 = await request(app) const response1 = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id, userId: uuidDto.notFound }) .query({ albumId: album.id, userId: uuidDto.notFound })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
@ -160,7 +162,7 @@ describe('/activity', () => {
expect(response1.body.length).toBe(0); expect(response1.body.length).toBe(0);
const response2 = await request(app) const response2 = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id, userId: admin.userId }) .query({ albumId: album.id, userId: admin.userId })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
@ -180,7 +182,7 @@ describe('/activity', () => {
]); ]);
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/activity') .get('/activities')
.query({ albumId: album.id, assetId: asset.id }) .query({ albumId: album.id, assetId: asset.id })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(200); expect(status).toEqual(200);
@ -189,16 +191,16 @@ describe('/activity', () => {
}); });
}); });
describe('POST /activity', () => { describe('POST /activities', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post('/activity'); const { status, body } = await request(app).post('/activities');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should require an albumId', async () => { it('should require an albumId', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: uuidDto.invalid }); .send({ albumId: uuidDto.invalid });
expect(status).toEqual(400); expect(status).toEqual(400);
@ -207,7 +209,7 @@ describe('/activity', () => {
it('should require a comment when type is comment', async () => { it('should require a comment when type is comment', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: uuidDto.notFound, type: 'comment', comment: null }); .send({ albumId: uuidDto.notFound, type: 'comment', comment: null });
expect(status).toEqual(400); expect(status).toEqual(400);
@ -216,7 +218,7 @@ describe('/activity', () => {
it('should add a comment to an album', async () => { it('should add a comment to an album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
albumId: album.id, albumId: album.id,
@ -236,7 +238,7 @@ describe('/activity', () => {
it('should add a like to an album', async () => { it('should add a like to an album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: album.id, type: 'like' }); .send({ albumId: album.id, type: 'like' });
expect(status).toEqual(201); expect(status).toEqual(201);
@ -253,7 +255,7 @@ describe('/activity', () => {
it('should return a 200 for a duplicate like on the album', async () => { it('should return a 200 for a duplicate like on the album', async () => {
const reaction = await createActivity({ albumId: album.id, type: ReactionType.Like }); const reaction = await createActivity({ albumId: album.id, type: ReactionType.Like });
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: album.id, type: 'like' }); .send({ albumId: album.id, type: 'like' });
expect(status).toEqual(200); expect(status).toEqual(200);
@ -267,7 +269,7 @@ describe('/activity', () => {
type: ReactionType.Like, type: ReactionType.Like,
}); });
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: album.id, type: 'like' }); .send({ albumId: album.id, type: 'like' });
expect(status).toEqual(201); expect(status).toEqual(201);
@ -276,7 +278,7 @@ describe('/activity', () => {
it('should add a comment to an asset', async () => { it('should add a comment to an asset', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
albumId: album.id, albumId: album.id,
@ -297,7 +299,7 @@ describe('/activity', () => {
it('should add a like to an asset', async () => { it('should add a like to an asset', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: album.id, assetId: asset.id, type: 'like' }); .send({ albumId: album.id, assetId: asset.id, type: 'like' });
expect(status).toEqual(201); expect(status).toEqual(201);
@ -319,7 +321,7 @@ describe('/activity', () => {
}); });
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/activity') .post('/activities')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ albumId: album.id, assetId: asset.id, type: 'like' }); .send({ albumId: album.id, assetId: asset.id, type: 'like' });
expect(status).toEqual(200); expect(status).toEqual(200);
@ -327,16 +329,16 @@ describe('/activity', () => {
}); });
}); });
describe('DELETE /activity/:id', () => { describe('DELETE /activities/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).delete(`/activity/${uuidDto.notFound}`); const { status, body } = await request(app).delete(`/activities/${uuidDto.notFound}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should require a valid uuid', async () => { it('should require a valid uuid', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/activity/${uuidDto.invalid}`) .delete(`/activities/${uuidDto.invalid}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['id must be a UUID'])); expect(body).toEqual(errorDto.badRequest(['id must be a UUID']));
@ -349,7 +351,7 @@ describe('/activity', () => {
comment: 'This is a test comment', comment: 'This is a test comment',
}); });
const { status } = await request(app) const { status } = await request(app)
.delete(`/activity/${reaction.id}`) .delete(`/activities/${reaction.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(204); expect(status).toEqual(204);
}); });
@ -360,7 +362,7 @@ describe('/activity', () => {
type: ReactionType.Like, type: ReactionType.Like,
}); });
const { status } = await request(app) const { status } = await request(app)
.delete(`/activity/${reaction.id}`) .delete(`/activities/${reaction.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(204); expect(status).toEqual(204);
}); });
@ -373,7 +375,7 @@ describe('/activity', () => {
}); });
const { status } = await request(app) const { status } = await request(app)
.delete(`/activity/${reaction.id}`) .delete(`/activities/${reaction.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(204); expect(status).toEqual(204);
@ -387,7 +389,7 @@ describe('/activity', () => {
}); });
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/activity/${reaction.id}`) .delete(`/activities/${reaction.id}`)
.set('Authorization', `Bearer ${nonOwner.accessToken}`); .set('Authorization', `Bearer ${nonOwner.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -405,7 +407,7 @@ describe('/activity', () => {
); );
const { status } = await request(app) const { status } = await request(app)
.delete(`/activity/${reaction.id}`) .delete(`/activities/${reaction.id}`)
.set('Authorization', `Bearer ${nonOwner.accessToken}`); .set('Authorization', `Bearer ${nonOwner.accessToken}`);
expect(status).toBe(204); expect(status).toBe(204);

View file

@ -23,7 +23,7 @@ const user2SharedUser = 'user2SharedUser';
const user2SharedLink = 'user2SharedLink'; const user2SharedLink = 'user2SharedLink';
const user2NotShared = 'user2NotShared'; const user2NotShared = 'user2NotShared';
describe('/album', () => { describe('/albums', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let user1: LoginResponseDto; let user1: LoginResponseDto;
let user1Asset1: AssetFileUploadResponseDto; let user1Asset1: AssetFileUploadResponseDto;
@ -110,16 +110,16 @@ describe('/album', () => {
await deleteUser({ id: user3.userId, deleteUserDto: {} }, { headers: asBearerAuth(admin.accessToken) }); await deleteUser({ id: user3.userId, deleteUserDto: {} }, { headers: asBearerAuth(admin.accessToken) });
}); });
describe('GET /album', () => { describe('GET /albums', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/album'); const { status, body } = await request(app).get('/albums');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should reject an invalid shared param', async () => { it('should reject an invalid shared param', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/album?shared=invalid') .get('/albums?shared=invalid')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toEqual(400); expect(status).toEqual(400);
expect(body).toEqual(errorDto.badRequest(['shared must be a boolean value'])); expect(body).toEqual(errorDto.badRequest(['shared must be a boolean value']));
@ -127,7 +127,7 @@ describe('/album', () => {
it('should reject an invalid assetId param', async () => { it('should reject an invalid assetId param', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/album?assetId=invalid') .get('/albums?assetId=invalid')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toEqual(400); expect(status).toEqual(400);
expect(body).toEqual(errorDto.badRequest(['assetId must be a UUID'])); expect(body).toEqual(errorDto.badRequest(['assetId must be a UUID']));
@ -135,7 +135,7 @@ describe('/album', () => {
it("should not show other users' favorites", async () => { it("should not show other users' favorites", async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album/${user1Albums[0].id}?withoutAssets=false`) .get(`/albums/${user1Albums[0].id}?withoutAssets=false`)
.set('Authorization', `Bearer ${user2.accessToken}`); .set('Authorization', `Bearer ${user2.accessToken}`);
expect(status).toEqual(200); expect(status).toEqual(200);
expect(body).toEqual({ expect(body).toEqual({
@ -146,7 +146,7 @@ describe('/album', () => {
it('should not return shared albums with a deleted owner', async () => { it('should not return shared albums with a deleted owner', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/album?shared=true') .get('/albums?shared=true')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -178,7 +178,7 @@ describe('/album', () => {
}); });
it('should return the album collection including owned and shared', async () => { it('should return the album collection including owned and shared', async () => {
const { status, body } = await request(app).get('/album').set('Authorization', `Bearer ${user1.accessToken}`); const { status, body } = await request(app).get('/albums').set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(4); expect(body).toHaveLength(4);
expect(body).toEqual( expect(body).toEqual(
@ -209,7 +209,7 @@ describe('/album', () => {
it('should return the album collection filtered by shared', async () => { it('should return the album collection filtered by shared', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/album?shared=true') .get('/albums?shared=true')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(4); expect(body).toHaveLength(4);
@ -241,7 +241,7 @@ describe('/album', () => {
it('should return the album collection filtered by NOT shared', async () => { it('should return the album collection filtered by NOT shared', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/album?shared=false') .get('/albums?shared=false')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(1); expect(body).toHaveLength(1);
@ -258,7 +258,7 @@ describe('/album', () => {
it('should return the album collection filtered by assetId', async () => { it('should return the album collection filtered by assetId', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album?assetId=${user1Asset2.id}`) .get(`/albums?assetId=${user1Asset2.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(1); expect(body).toHaveLength(1);
@ -266,7 +266,7 @@ describe('/album', () => {
it('should return the album collection filtered by assetId and ignores shared=true', async () => { it('should return the album collection filtered by assetId and ignores shared=true', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album?shared=true&assetId=${user1Asset1.id}`) .get(`/albums?shared=true&assetId=${user1Asset1.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(5); expect(body).toHaveLength(5);
@ -274,23 +274,23 @@ describe('/album', () => {
it('should return the album collection filtered by assetId and ignores shared=false', async () => { it('should return the album collection filtered by assetId and ignores shared=false', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album?shared=false&assetId=${user1Asset1.id}`) .get(`/albums?shared=false&assetId=${user1Asset1.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(5); expect(body).toHaveLength(5);
}); });
}); });
describe('GET /album/:id', () => { describe('GET /albums/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/album/${user1Albums[0].id}`); const { status, body } = await request(app).get(`/albums/${user1Albums[0].id}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should return album info for own album', async () => { it('should return album info for own album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album/${user1Albums[0].id}?withoutAssets=false`) .get(`/albums/${user1Albums[0].id}?withoutAssets=false`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -302,7 +302,7 @@ describe('/album', () => {
it('should return album info for shared album (editor)', async () => { it('should return album info for shared album (editor)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album/${user2Albums[0].id}?withoutAssets=false`) .get(`/albums/${user2Albums[0].id}?withoutAssets=false`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -311,7 +311,7 @@ describe('/album', () => {
it('should return album info for shared album (viewer)', async () => { it('should return album info for shared album (viewer)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album/${user1Albums[3].id}?withoutAssets=false`) .get(`/albums/${user1Albums[3].id}?withoutAssets=false`)
.set('Authorization', `Bearer ${user2.accessToken}`); .set('Authorization', `Bearer ${user2.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -320,7 +320,7 @@ describe('/album', () => {
it('should return album info with assets when withoutAssets is undefined', async () => { it('should return album info with assets when withoutAssets is undefined', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album/${user1Albums[0].id}`) .get(`/albums/${user1Albums[0].id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -332,7 +332,7 @@ describe('/album', () => {
it('should return album info without assets when withoutAssets is true', async () => { it('should return album info without assets when withoutAssets is true', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/album/${user1Albums[0].id}?withoutAssets=true`) .get(`/albums/${user1Albums[0].id}?withoutAssets=true`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -344,16 +344,16 @@ describe('/album', () => {
}); });
}); });
describe('GET /album/count', () => { describe('GET /albums/count', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/album/count'); const { status, body } = await request(app).get('/albums/count');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should return total count of albums the user has access to', async () => { it('should return total count of albums the user has access to', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/album/count') .get('/albums/count')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -361,16 +361,16 @@ describe('/album', () => {
}); });
}); });
describe('POST /album', () => { describe('POST /albums', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post('/album').send({ albumName: 'New album' }); const { status, body } = await request(app).post('/albums').send({ albumName: 'New album' });
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should create an album', async () => { it('should create an album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/album') .post('/albums')
.send({ albumName: 'New album' }) .send({ albumName: 'New album' })
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(201); expect(status).toBe(201);
@ -395,9 +395,9 @@ describe('/album', () => {
}); });
}); });
describe('PUT /album/:id/assets', () => { describe('PUT /albums/:id/assets', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).put(`/album/${user1Albums[0].id}/assets`); const { status, body } = await request(app).put(`/albums/${user1Albums[0].id}/assets`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
@ -405,7 +405,7 @@ describe('/album', () => {
it('should be able to add own asset to own album', async () => { it('should be able to add own asset to own album', async () => {
const asset = await utils.createAsset(user1.accessToken); const asset = await utils.createAsset(user1.accessToken);
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${user1Albums[0].id}/assets`) .put(`/albums/${user1Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ ids: [asset.id] }); .send({ ids: [asset.id] });
@ -416,7 +416,7 @@ describe('/album', () => {
it('should be able to add own asset to shared album', async () => { it('should be able to add own asset to shared album', async () => {
const asset = await utils.createAsset(user1.accessToken); const asset = await utils.createAsset(user1.accessToken);
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${user2Albums[0].id}/assets`) .put(`/albums/${user2Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ ids: [asset.id] }); .send({ ids: [asset.id] });
@ -427,7 +427,7 @@ describe('/album', () => {
it('should not be able to add assets to album as a viewer', async () => { it('should not be able to add assets to album as a viewer', async () => {
const asset = await utils.createAsset(user2.accessToken); const asset = await utils.createAsset(user2.accessToken);
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${user1Albums[3].id}/assets`) .put(`/albums/${user1Albums[3].id}/assets`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ ids: [asset.id] }); .send({ ids: [asset.id] });
@ -438,7 +438,7 @@ describe('/album', () => {
it('should add duplicate assets only once', async () => { it('should add duplicate assets only once', async () => {
const asset = await utils.createAsset(user1.accessToken); const asset = await utils.createAsset(user1.accessToken);
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${user1Albums[0].id}/assets`) .put(`/albums/${user1Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ ids: [asset.id, asset.id] }); .send({ ids: [asset.id, asset.id] });
@ -450,10 +450,10 @@ describe('/album', () => {
}); });
}); });
describe('PATCH /album/:id', () => { describe('PATCH /albums/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/album/${uuidDto.notFound}`) .patch(`/albums/${uuidDto.notFound}`)
.send({ albumName: 'New album name' }); .send({ albumName: 'New album name' });
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -464,7 +464,7 @@ describe('/album', () => {
albumName: 'New album', albumName: 'New album',
}); });
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/album/${album.id}`) .patch(`/albums/${album.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ .send({
albumName: 'New album name', albumName: 'New album name',
@ -481,7 +481,7 @@ describe('/album', () => {
it('should not be able to update as a viewer', async () => { it('should not be able to update as a viewer', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/album/${user1Albums[3].id}`) .patch(`/albums/${user1Albums[3].id}`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ albumName: 'New album name' }); .send({ albumName: 'New album name' });
@ -491,7 +491,7 @@ describe('/album', () => {
it('should not be able to update as an editor', async () => { it('should not be able to update as an editor', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/album/${user1Albums[0].id}`) .patch(`/albums/${user1Albums[0].id}`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ albumName: 'New album name' }); .send({ albumName: 'New album name' });
@ -500,10 +500,10 @@ describe('/album', () => {
}); });
}); });
describe('DELETE /album/:id/assets', () => { describe('DELETE /albums/:id/assets', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user1Albums[0].id}/assets`) .delete(`/albums/${user1Albums[0].id}/assets`)
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
expect(status).toBe(401); expect(status).toBe(401);
@ -512,7 +512,7 @@ describe('/album', () => {
it('should not be able to remove foreign asset from own album', async () => { it('should not be able to remove foreign asset from own album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user2Albums[0].id}/assets`) .delete(`/albums/${user2Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
@ -528,7 +528,7 @@ describe('/album', () => {
it('should not be able to remove foreign asset from foreign album', async () => { it('should not be able to remove foreign asset from foreign album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user1Albums[0].id}/assets`) .delete(`/albums/${user1Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
@ -544,7 +544,7 @@ describe('/album', () => {
it('should be able to remove own asset from own album', async () => { it('should be able to remove own asset from own album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user1Albums[0].id}/assets`) .delete(`/albums/${user1Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
@ -554,7 +554,7 @@ describe('/album', () => {
it('should be able to remove own asset from shared album', async () => { it('should be able to remove own asset from shared album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user2Albums[0].id}/assets`) .delete(`/albums/${user2Albums[0].id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
@ -564,7 +564,7 @@ describe('/album', () => {
it('should not be able to remove assets from album as a viewer', async () => { it('should not be able to remove assets from album as a viewer', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user1Albums[3].id}/assets`) .delete(`/albums/${user1Albums[3].id}/assets`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
@ -574,7 +574,7 @@ describe('/album', () => {
it('should remove duplicate assets only once', async () => { it('should remove duplicate assets only once', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/album/${user1Albums[1].id}/assets`) .delete(`/albums/${user1Albums[1].id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ ids: [user1Asset1.id, user1Asset1.id] }); .send({ ids: [user1Asset1.id, user1Asset1.id] });
@ -596,7 +596,7 @@ describe('/album', () => {
}); });
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).put(`/album/${user1Albums[0].id}/users`).send({ sharedUserIds: [] }); const { status, body } = await request(app).put(`/albums/${user1Albums[0].id}/users`).send({ sharedUserIds: [] });
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -604,7 +604,7 @@ describe('/album', () => {
it('should be able to add user to own album', async () => { it('should be able to add user to own album', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${album.id}/users`) .put(`/albums/${album.id}/users`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ albumUsers: [{ userId: user2.userId, role: AlbumUserRole.Editor }] }); .send({ albumUsers: [{ userId: user2.userId, role: AlbumUserRole.Editor }] });
@ -618,7 +618,7 @@ describe('/album', () => {
it('should not be able to share album with owner', async () => { it('should not be able to share album with owner', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${album.id}/users`) .put(`/albums/${album.id}/users`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ albumUsers: [{ userId: user1.userId, role: AlbumUserRole.Editor }] }); .send({ albumUsers: [{ userId: user1.userId, role: AlbumUserRole.Editor }] });
@ -628,12 +628,12 @@ describe('/album', () => {
it('should not be able to add existing user to shared album', async () => { it('should not be able to add existing user to shared album', async () => {
await request(app) await request(app)
.put(`/album/${album.id}/users`) .put(`/albums/${album.id}/users`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ albumUsers: [{ userId: user2.userId, role: AlbumUserRole.Editor }] }); .send({ albumUsers: [{ userId: user2.userId, role: AlbumUserRole.Editor }] });
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${album.id}/users`) .put(`/albums/${album.id}/users`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ albumUsers: [{ userId: user2.userId, role: AlbumUserRole.Editor }] }); .send({ albumUsers: [{ userId: user2.userId, role: AlbumUserRole.Editor }] });
@ -652,14 +652,16 @@ describe('/album', () => {
expect(album.albumUsers[0].role).toEqual(AlbumUserRole.Viewer); expect(album.albumUsers[0].role).toEqual(AlbumUserRole.Viewer);
const { status } = await request(app) const { status } = await request(app)
.put(`/album/${album.id}/user/${user2.userId}`) .put(`/albums/${album.id}/user/${user2.userId}`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ role: AlbumUserRole.Editor }); .send({ role: AlbumUserRole.Editor });
expect(status).toBe(200); expect(status).toBe(200);
// Get album to verify the role change // Get album to verify the role change
const { body } = await request(app).get(`/album/${album.id}`).set('Authorization', `Bearer ${user1.accessToken}`); const { body } = await request(app)
.get(`/albums/${album.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`);
expect(body).toEqual( expect(body).toEqual(
expect.objectContaining({ expect.objectContaining({
albumUsers: [expect.objectContaining({ role: AlbumUserRole.Editor })], albumUsers: [expect.objectContaining({ role: AlbumUserRole.Editor })],
@ -676,7 +678,7 @@ describe('/album', () => {
expect(album.albumUsers[0].role).toEqual(AlbumUserRole.Viewer); expect(album.albumUsers[0].role).toEqual(AlbumUserRole.Viewer);
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/album/${album.id}/user/${user2.userId}`) .put(`/albums/${album.id}/user/${user2.userId}`)
.set('Authorization', `Bearer ${user2.accessToken}`) .set('Authorization', `Bearer ${user2.accessToken}`)
.send({ role: AlbumUserRole.Editor }); .send({ role: AlbumUserRole.Editor });

View file

@ -5,6 +5,7 @@ import {
LoginResponseDto, LoginResponseDto,
SharedLinkType, SharedLinkType,
getAssetInfo, getAssetInfo,
getMyUserInfo,
updateAssets, updateAssets,
} from '@immich/sdk'; } from '@immich/sdk';
import { exiftool } from 'exiftool-vendored'; import { exiftool } from 'exiftool-vendored';
@ -830,7 +831,7 @@ describe('/asset', () => {
expect(body).toEqual({ id: expect.any(String), duplicate: false }); expect(body).toEqual({ id: expect.any(String), duplicate: false });
expect(status).toBe(201); expect(status).toBe(201);
const { body: user } = await request(app).get('/user/me').set('Authorization', `Bearer ${quotaUser.accessToken}`); const user = await getMyUserInfo({ headers: asBearerAuth(quotaUser.accessToken) });
expect(user).toEqual(expect.objectContaining({ quotaUsageInBytes: 70 })); expect(user).toEqual(expect.objectContaining({ quotaUsageInBytes: 70 }));
}); });

View file

@ -2,7 +2,7 @@ import { deleteAssets, getAuditFiles, updateAsset, type LoginResponseDto } from
import { asBearerAuth, utils } from 'src/utils'; import { asBearerAuth, utils } from 'src/utils';
import { beforeAll, describe, expect, it } from 'vitest'; import { beforeAll, describe, expect, it } from 'vitest';
describe('/audit', () => { describe('/audits', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
beforeAll(async () => { beforeAll(async () => {

View file

@ -11,7 +11,7 @@ import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'vitest';
const scan = async (accessToken: string, id: string, dto: ScanLibraryDto = {}) => const scan = async (accessToken: string, id: string, dto: ScanLibraryDto = {}) =>
scanLibrary({ id, scanLibraryDto: dto }, { headers: asBearerAuth(accessToken) }); scanLibrary({ id, scanLibraryDto: dto }, { headers: asBearerAuth(accessToken) });
describe('/library', () => { describe('/libraries', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let user: LoginResponseDto; let user: LoginResponseDto;
let library: LibraryResponseDto; let library: LibraryResponseDto;
@ -37,24 +37,24 @@ describe('/library', () => {
utils.resetEvents(); utils.resetEvents();
}); });
describe('GET /library', () => { describe('GET /libraries', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/library'); const { status, body } = await request(app).get('/libraries');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
}); });
describe('POST /library', () => { describe('POST /libraries', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post('/library').send({}); const { status, body } = await request(app).post('/libraries').send({});
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should require admin authentication', async () => { it('should require admin authentication', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/library') .post('/libraries')
.set('Authorization', `Bearer ${user.accessToken}`) .set('Authorization', `Bearer ${user.accessToken}`)
.send({ ownerId: admin.userId }); .send({ ownerId: admin.userId });
@ -64,7 +64,7 @@ describe('/library', () => {
it('should create an external library with defaults', async () => { it('should create an external library with defaults', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/library') .post('/libraries')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ ownerId: admin.userId }); .send({ ownerId: admin.userId });
@ -83,7 +83,7 @@ describe('/library', () => {
it('should create an external library with options', async () => { it('should create an external library with options', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/library') .post('/libraries')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
ownerId: admin.userId, ownerId: admin.userId,
@ -103,7 +103,7 @@ describe('/library', () => {
it('should not create an external library with duplicate import paths', async () => { it('should not create an external library with duplicate import paths', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/library') .post('/libraries')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
ownerId: admin.userId, ownerId: admin.userId,
@ -118,7 +118,7 @@ describe('/library', () => {
it('should not create an external library with duplicate exclusion patterns', async () => { it('should not create an external library with duplicate exclusion patterns', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/library') .post('/libraries')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
ownerId: admin.userId, ownerId: admin.userId,
@ -132,16 +132,16 @@ describe('/library', () => {
}); });
}); });
describe('PUT /library/:id', () => { describe('PUT /libraries/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).put(`/library/${uuidDto.notFound}`).send({}); const { status, body } = await request(app).put(`/libraries/${uuidDto.notFound}`).send({});
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should change the library name', async () => { it('should change the library name', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ name: 'New Library Name' }); .send({ name: 'New Library Name' });
@ -155,7 +155,7 @@ describe('/library', () => {
it('should not set an empty name', async () => { it('should not set an empty name', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ name: '' }); .send({ name: '' });
@ -165,7 +165,7 @@ describe('/library', () => {
it('should change the import paths', async () => { it('should change the import paths', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ importPaths: [testAssetDirInternal] }); .send({ importPaths: [testAssetDirInternal] });
@ -179,7 +179,7 @@ describe('/library', () => {
it('should reject an empty import path', async () => { it('should reject an empty import path', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ importPaths: [''] }); .send({ importPaths: [''] });
@ -189,7 +189,7 @@ describe('/library', () => {
it('should reject duplicate import paths', async () => { it('should reject duplicate import paths', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ importPaths: ['/path', '/path'] }); .send({ importPaths: ['/path', '/path'] });
@ -199,7 +199,7 @@ describe('/library', () => {
it('should change the exclusion pattern', async () => { it('should change the exclusion pattern', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ exclusionPatterns: ['**/Raw/**'] }); .send({ exclusionPatterns: ['**/Raw/**'] });
@ -213,7 +213,7 @@ describe('/library', () => {
it('should reject duplicate exclusion patterns', async () => { it('should reject duplicate exclusion patterns', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ exclusionPatterns: ['**/*.jpg', '**/*.jpg'] }); .send({ exclusionPatterns: ['**/*.jpg', '**/*.jpg'] });
@ -223,7 +223,7 @@ describe('/library', () => {
it('should reject an empty exclusion pattern', async () => { it('should reject an empty exclusion pattern', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/library/${library.id}`) .put(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ exclusionPatterns: [''] }); .send({ exclusionPatterns: [''] });
@ -232,9 +232,9 @@ describe('/library', () => {
}); });
}); });
describe('GET /library/:id', () => { describe('GET /libraries/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/library/${uuidDto.notFound}`); const { status, body } = await request(app).get(`/libraries/${uuidDto.notFound}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -242,7 +242,7 @@ describe('/library', () => {
it('should require admin access', async () => { it('should require admin access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/library/${uuidDto.notFound}`) .get(`/libraries/${uuidDto.notFound}`)
.set('Authorization', `Bearer ${user.accessToken}`); .set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(403); expect(status).toBe(403);
expect(body).toEqual(errorDto.forbidden); expect(body).toEqual(errorDto.forbidden);
@ -252,7 +252,7 @@ describe('/library', () => {
const library = await utils.createLibrary(admin.accessToken, { ownerId: admin.userId }); const library = await utils.createLibrary(admin.accessToken, { ownerId: admin.userId });
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/library/${library.id}`) .get(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -269,18 +269,18 @@ describe('/library', () => {
}); });
}); });
describe('GET /library/:id/statistics', () => { describe('GET /libraries/:id/statistics', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/library/${uuidDto.notFound}/statistics`); const { status, body } = await request(app).get(`/libraries/${uuidDto.notFound}/statistics`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
}); });
describe('POST /library/:id/scan', () => { describe('POST /libraries/:id/scan', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post(`/library/${uuidDto.notFound}/scan`).send({}); const { status, body } = await request(app).post(`/libraries/${uuidDto.notFound}/scan`).send({});
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -496,9 +496,9 @@ describe('/library', () => {
}); });
}); });
describe('POST /library/:id/removeOffline', () => { describe('POST /libraries/:id/removeOffline', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post(`/library/${uuidDto.notFound}/removeOffline`).send({}); const { status, body } = await request(app).post(`/libraries/${uuidDto.notFound}/removeOffline`).send({});
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -532,7 +532,7 @@ describe('/library', () => {
expect(offlineAssets.count).toBe(1); expect(offlineAssets.count).toBe(1);
const { status } = await request(app) const { status } = await request(app)
.post(`/library/${library.id}/removeOffline`) .post(`/libraries/${library.id}/removeOffline`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send(); .send();
expect(status).toBe(204); expect(status).toBe(204);
@ -557,7 +557,7 @@ describe('/library', () => {
expect(assetsBefore.count).toBeGreaterThan(1); expect(assetsBefore.count).toBeGreaterThan(1);
const { status } = await request(app) const { status } = await request(app)
.post(`/library/${library.id}/removeOffline`) .post(`/libraries/${library.id}/removeOffline`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send(); .send();
expect(status).toBe(204); expect(status).toBe(204);
@ -569,9 +569,9 @@ describe('/library', () => {
}); });
}); });
describe('POST /library/:id/validate', () => { describe('POST /libraries/:id/validate', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post(`/library/${uuidDto.notFound}/validate`).send({}); const { status, body } = await request(app).post(`/libraries/${uuidDto.notFound}/validate`).send({});
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -617,9 +617,9 @@ describe('/library', () => {
}); });
}); });
describe('DELETE /library/:id', () => { describe('DELETE /libraries/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).delete(`/library/${uuidDto.notFound}`); const { status, body } = await request(app).delete(`/libraries/${uuidDto.notFound}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -629,7 +629,7 @@ describe('/library', () => {
const library = await utils.createLibrary(admin.accessToken, { ownerId: admin.userId }); const library = await utils.createLibrary(admin.accessToken, { ownerId: admin.userId });
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/library/${library.id}`) .delete(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(204); expect(status).toBe(204);
@ -655,7 +655,7 @@ describe('/library', () => {
await utils.waitForWebsocketEvent({ event: 'assetUpload', total: 2 }); await utils.waitForWebsocketEvent({ event: 'assetUpload', total: 2 });
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/library/${library.id}`) .delete(`/libraries/${library.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(204); expect(status).toBe(204);

View file

@ -5,7 +5,7 @@ import { app, asBearerAuth, utils } from 'src/utils';
import request from 'supertest'; import request from 'supertest';
import { beforeAll, describe, expect, it } from 'vitest'; import { beforeAll, describe, expect, it } from 'vitest';
describe('/partner', () => { describe('/partners', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let user1: LoginResponseDto; let user1: LoginResponseDto;
let user2: LoginResponseDto; let user2: LoginResponseDto;
@ -28,9 +28,9 @@ describe('/partner', () => {
]); ]);
}); });
describe('GET /partner', () => { describe('GET /partners', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/partner'); const { status, body } = await request(app).get('/partners');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -38,7 +38,7 @@ describe('/partner', () => {
it('should get all partners shared by user', async () => { it('should get all partners shared by user', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/partner') .get('/partners')
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.query({ direction: 'shared-by' }); .query({ direction: 'shared-by' });
@ -48,7 +48,7 @@ describe('/partner', () => {
it('should get all partners that share with user', async () => { it('should get all partners that share with user', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/partner') .get('/partners')
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.query({ direction: 'shared-with' }); .query({ direction: 'shared-with' });
@ -57,9 +57,9 @@ describe('/partner', () => {
}); });
}); });
describe('POST /partner/:id', () => { describe('POST /partners/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post(`/partner/${user3.userId}`); const { status, body } = await request(app).post(`/partners/${user3.userId}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -67,7 +67,7 @@ describe('/partner', () => {
it('should share with new partner', async () => { it('should share with new partner', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/partner/${user3.userId}`) .post(`/partners/${user3.userId}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(201); expect(status).toBe(201);
@ -76,7 +76,7 @@ describe('/partner', () => {
it('should not share with new partner if already sharing with this partner', async () => { it('should not share with new partner if already sharing with this partner', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/partner/${user2.userId}`) .post(`/partners/${user2.userId}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -84,9 +84,9 @@ describe('/partner', () => {
}); });
}); });
describe('PUT /partner/:id', () => { describe('PUT /partners/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).put(`/partner/${user2.userId}`); const { status, body } = await request(app).put(`/partners/${user2.userId}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -94,7 +94,7 @@ describe('/partner', () => {
it('should update partner', async () => { it('should update partner', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/partner/${user2.userId}`) .put(`/partners/${user2.userId}`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ inTimeline: false }); .send({ inTimeline: false });
@ -103,9 +103,9 @@ describe('/partner', () => {
}); });
}); });
describe('DELETE /partner/:id', () => { describe('DELETE /partners/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).delete(`/partner/${user3.userId}`); const { status, body } = await request(app).delete(`/partners/${user3.userId}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -113,7 +113,7 @@ describe('/partner', () => {
it('should delete partner', async () => { it('should delete partner', async () => {
const { status } = await request(app) const { status } = await request(app)
.delete(`/partner/${user3.userId}`) .delete(`/partners/${user3.userId}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -121,7 +121,7 @@ describe('/partner', () => {
it('should throw a bad request if partner not found', async () => { it('should throw a bad request if partner not found', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/partner/${user3.userId}`) .delete(`/partners/${user3.userId}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);

View file

@ -12,7 +12,7 @@ const invalidBirthday = [
{ birthDate: new Date(9999, 0, 0).toISOString(), response: ['Birth date cannot be in the future'] }, { birthDate: new Date(9999, 0, 0).toISOString(), response: ['Birth date cannot be in the future'] },
]; ];
describe('/person', () => { describe('/people', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let visiblePerson: PersonResponseDto; let visiblePerson: PersonResponseDto;
let hiddenPerson: PersonResponseDto; let hiddenPerson: PersonResponseDto;
@ -47,11 +47,11 @@ describe('/person', () => {
]); ]);
}); });
describe('GET /person', () => { describe('GET /people', () => {
beforeEach(async () => {}); beforeEach(async () => {});
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/person'); const { status, body } = await request(app).get('/people');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -59,7 +59,7 @@ describe('/person', () => {
it('should return all people (including hidden)', async () => { it('should return all people (including hidden)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/person') .get('/people')
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.query({ withHidden: true }); .query({ withHidden: true });
@ -76,7 +76,7 @@ describe('/person', () => {
}); });
it('should return only visible people', async () => { it('should return only visible people', async () => {
const { status, body } = await request(app).get('/person').set('Authorization', `Bearer ${admin.accessToken}`); const { status, body } = await request(app).get('/people').set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toEqual({ expect(body).toEqual({
@ -90,9 +90,9 @@ describe('/person', () => {
}); });
}); });
describe('GET /person/:id', () => { describe('GET /people/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/person/${uuidDto.notFound}`); const { status, body } = await request(app).get(`/people/${uuidDto.notFound}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -100,7 +100,7 @@ describe('/person', () => {
it('should throw error if person with id does not exist', async () => { it('should throw error if person with id does not exist', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/person/${uuidDto.notFound}`) .get(`/people/${uuidDto.notFound}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -109,7 +109,7 @@ describe('/person', () => {
it('should return person information', async () => { it('should return person information', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/person/${visiblePerson.id}`) .get(`/people/${visiblePerson.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -117,9 +117,9 @@ describe('/person', () => {
}); });
}); });
describe('GET /person/:id/statistics', () => { describe('GET /people/:id/statistics', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/person/${multipleAssetsPerson.id}/statistics`); const { status, body } = await request(app).get(`/people/${multipleAssetsPerson.id}/statistics`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -127,7 +127,7 @@ describe('/person', () => {
it('should throw error if person with id does not exist', async () => { it('should throw error if person with id does not exist', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/person/${uuidDto.notFound}/statistics`) .get(`/people/${uuidDto.notFound}/statistics`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -136,7 +136,7 @@ describe('/person', () => {
it('should return the correct number of assets', async () => { it('should return the correct number of assets', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/person/${multipleAssetsPerson.id}/statistics`) .get(`/people/${multipleAssetsPerson.id}/statistics`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -144,9 +144,9 @@ describe('/person', () => {
}); });
}); });
describe('POST /person', () => { describe('POST /people', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post(`/person`); const { status, body } = await request(app).post(`/people`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
@ -154,7 +154,7 @@ describe('/person', () => {
for (const { birthDate, response } of invalidBirthday) { for (const { birthDate, response } of invalidBirthday) {
it(`should not accept an invalid birth date [${birthDate}]`, async () => { it(`should not accept an invalid birth date [${birthDate}]`, async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/person`) .post(`/people`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ birthDate }); .send({ birthDate });
expect(status).toBe(400); expect(status).toBe(400);
@ -164,7 +164,7 @@ describe('/person', () => {
it('should create a person', async () => { it('should create a person', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/person`) .post(`/people`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
name: 'New Person', name: 'New Person',
@ -179,9 +179,9 @@ describe('/person', () => {
}); });
}); });
describe('PUT /person/:id', () => { describe('PUT /people/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).put(`/person/${uuidDto.notFound}`); const { status, body } = await request(app).put(`/people/${uuidDto.notFound}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
@ -193,7 +193,7 @@ describe('/person', () => {
]) { ]) {
it(`should not allow null ${key}`, async () => { it(`should not allow null ${key}`, async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/person/${visiblePerson.id}`) .put(`/people/${visiblePerson.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ [key]: null }); .send({ [key]: null });
expect(status).toBe(400); expect(status).toBe(400);
@ -204,7 +204,7 @@ describe('/person', () => {
for (const { birthDate, response } of invalidBirthday) { for (const { birthDate, response } of invalidBirthday) {
it(`should not accept an invalid birth date [${birthDate}]`, async () => { it(`should not accept an invalid birth date [${birthDate}]`, async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/person/${visiblePerson.id}`) .put(`/people/${visiblePerson.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ birthDate }); .send({ birthDate });
expect(status).toBe(400); expect(status).toBe(400);
@ -214,7 +214,7 @@ describe('/person', () => {
it('should update a date of birth', async () => { it('should update a date of birth', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/person/${visiblePerson.id}`) .put(`/people/${visiblePerson.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ birthDate: '1990-01-01T05:00:00.000Z' }); .send({ birthDate: '1990-01-01T05:00:00.000Z' });
expect(status).toBe(200); expect(status).toBe(200);
@ -223,7 +223,7 @@ describe('/person', () => {
it('should clear a date of birth', async () => { it('should clear a date of birth', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/person/${visiblePerson.id}`) .put(`/people/${visiblePerson.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ birthDate: null }); .send({ birthDate: null });
expect(status).toBe(200); expect(status).toBe(200);

View file

@ -13,7 +13,7 @@ import { app, asBearerAuth, shareUrl, utils } from 'src/utils';
import request from 'supertest'; import request from 'supertest';
import { beforeAll, describe, expect, it } from 'vitest'; import { beforeAll, describe, expect, it } from 'vitest';
describe('/shared-link', () => { describe('/shared-links', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let asset1: AssetFileUploadResponseDto; let asset1: AssetFileUploadResponseDto;
let asset2: AssetFileUploadResponseDto; let asset2: AssetFileUploadResponseDto;
@ -114,9 +114,9 @@ describe('/shared-link', () => {
}); });
}); });
describe('GET /shared-link', () => { describe('GET /shared-links', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/shared-link'); const { status, body } = await request(app).get('/shared-links');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -124,7 +124,7 @@ describe('/shared-link', () => {
it('should get all shared links created by user', async () => { it('should get all shared links created by user', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/shared-link') .get('/shared-links')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -142,7 +142,7 @@ describe('/shared-link', () => {
it('should not get shared links created by other users', async () => { it('should not get shared links created by other users', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/shared-link') .get('/shared-links')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -150,15 +150,15 @@ describe('/shared-link', () => {
}); });
}); });
describe('GET /shared-link/me', () => { describe('GET /shared-links/me', () => {
it('should not require admin authentication', async () => { it('should not require admin authentication', async () => {
const { status } = await request(app).get('/shared-link/me').set('Authorization', `Bearer ${admin.accessToken}`); const { status } = await request(app).get('/shared-links/me').set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(403); expect(status).toBe(403);
}); });
it('should get data for correct shared link', async () => { it('should get data for correct shared link', async () => {
const { status, body } = await request(app).get('/shared-link/me').query({ key: linkWithAlbum.key }); const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithAlbum.key });
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toEqual( expect(body).toEqual(
@ -172,7 +172,7 @@ describe('/shared-link', () => {
it('should return unauthorized for incorrect shared link', async () => { it('should return unauthorized for incorrect shared link', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/shared-link/me') .get('/shared-links/me')
.query({ key: linkWithAlbum.key + 'foo' }); .query({ key: linkWithAlbum.key + 'foo' });
expect(status).toBe(401); expect(status).toBe(401);
@ -180,14 +180,14 @@ describe('/shared-link', () => {
}); });
it('should return unauthorized if target has been soft deleted', async () => { it('should return unauthorized if target has been soft deleted', async () => {
const { status, body } = await request(app).get('/shared-link/me').query({ key: linkWithDeletedAlbum.key }); const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithDeletedAlbum.key });
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.invalidShareKey); expect(body).toEqual(errorDto.invalidShareKey);
}); });
it('should return unauthorized for password protected link', async () => { it('should return unauthorized for password protected link', async () => {
const { status, body } = await request(app).get('/shared-link/me').query({ key: linkWithPassword.key }); const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithPassword.key });
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.invalidSharePassword); expect(body).toEqual(errorDto.invalidSharePassword);
@ -195,7 +195,7 @@ describe('/shared-link', () => {
it('should get data for correct password protected link', async () => { it('should get data for correct password protected link', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/shared-link/me') .get('/shared-links/me')
.query({ key: linkWithPassword.key, password: 'foo' }); .query({ key: linkWithPassword.key, password: 'foo' });
expect(status).toBe(200); expect(status).toBe(200);
@ -209,7 +209,7 @@ describe('/shared-link', () => {
}); });
it('should return metadata for album shared link', async () => { it('should return metadata for album shared link', async () => {
const { status, body } = await request(app).get('/shared-link/me').query({ key: linkWithMetadata.key }); const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithMetadata.key });
expect(status).toBe(200); expect(status).toBe(200);
expect(body.assets).toHaveLength(1); expect(body.assets).toHaveLength(1);
@ -225,7 +225,7 @@ describe('/shared-link', () => {
}); });
it('should not return metadata for album shared link without metadata', async () => { it('should not return metadata for album shared link without metadata', async () => {
const { status, body } = await request(app).get('/shared-link/me').query({ key: linkWithoutMetadata.key }); const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithoutMetadata.key });
expect(status).toBe(200); expect(status).toBe(200);
expect(body.assets).toHaveLength(1); expect(body.assets).toHaveLength(1);
@ -239,9 +239,9 @@ describe('/shared-link', () => {
}); });
}); });
describe('GET /shared-link/:id', () => { describe('GET /shared-links/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/shared-link/${linkWithAlbum.id}`); const { status, body } = await request(app).get(`/shared-links/${linkWithAlbum.id}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -249,7 +249,7 @@ describe('/shared-link', () => {
it('should get shared link by id', async () => { it('should get shared link by id', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/shared-link/${linkWithAlbum.id}`) .get(`/shared-links/${linkWithAlbum.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -264,7 +264,7 @@ describe('/shared-link', () => {
it('should not get shared link by id if user has not created the link or it does not exist', async () => { it('should not get shared link by id if user has not created the link or it does not exist', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/shared-link/${linkWithAlbum.id}`) .get(`/shared-links/${linkWithAlbum.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -272,10 +272,10 @@ describe('/shared-link', () => {
}); });
}); });
describe('POST /shared-link', () => { describe('POST /shared-links', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/shared-link') .post('/shared-links')
.send({ type: SharedLinkType.Album, albumId: uuidDto.notFound }); .send({ type: SharedLinkType.Album, albumId: uuidDto.notFound });
expect(status).toBe(401); expect(status).toBe(401);
@ -284,7 +284,7 @@ describe('/shared-link', () => {
it('should require a type and the correspondent asset/album id', async () => { it('should require a type and the correspondent asset/album id', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/shared-link') .post('/shared-links')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -293,7 +293,7 @@ describe('/shared-link', () => {
it('should require an asset/album id', async () => { it('should require an asset/album id', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/shared-link') .post('/shared-links')
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ type: SharedLinkType.Album }); .send({ type: SharedLinkType.Album });
@ -303,7 +303,7 @@ describe('/shared-link', () => {
it('should require a valid asset id', async () => { it('should require a valid asset id', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/shared-link') .post('/shared-links')
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ type: SharedLinkType.Individual, assetId: uuidDto.notFound }); .send({ type: SharedLinkType.Individual, assetId: uuidDto.notFound });
@ -313,7 +313,7 @@ describe('/shared-link', () => {
it('should create a shared link', async () => { it('should create a shared link', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post('/shared-link') .post('/shared-links')
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ type: SharedLinkType.Album, albumId: album.id }); .send({ type: SharedLinkType.Album, albumId: album.id });
@ -327,10 +327,10 @@ describe('/shared-link', () => {
}); });
}); });
describe('PATCH /shared-link/:id', () => { describe('PATCH /shared-links/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/shared-link/${linkWithAlbum.id}`) .patch(`/shared-links/${linkWithAlbum.id}`)
.send({ description: 'foo' }); .send({ description: 'foo' });
expect(status).toBe(401); expect(status).toBe(401);
@ -339,7 +339,7 @@ describe('/shared-link', () => {
it('should fail if invalid link', async () => { it('should fail if invalid link', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/shared-link/${uuidDto.notFound}`) .patch(`/shared-links/${uuidDto.notFound}`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ description: 'foo' }); .send({ description: 'foo' });
@ -349,7 +349,7 @@ describe('/shared-link', () => {
it('should update shared link', async () => { it('should update shared link', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.patch(`/shared-link/${linkWithAlbum.id}`) .patch(`/shared-links/${linkWithAlbum.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ description: 'foo' }); .send({ description: 'foo' });
@ -364,10 +364,10 @@ describe('/shared-link', () => {
}); });
}); });
describe('PUT /shared-link/:id/assets', () => { describe('PUT /shared-links/:id/assets', () => {
it('should not add assets to shared link (album)', async () => { it('should not add assets to shared link (album)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/shared-link/${linkWithAlbum.id}/assets`) .put(`/shared-links/${linkWithAlbum.id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ assetIds: [asset2.id] }); .send({ assetIds: [asset2.id] });
@ -377,7 +377,7 @@ describe('/shared-link', () => {
it('should add an assets to a shared link (individual)', async () => { it('should add an assets to a shared link (individual)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/shared-link/${linkWithAssets.id}/assets`) .put(`/shared-links/${linkWithAssets.id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ assetIds: [asset2.id] }); .send({ assetIds: [asset2.id] });
@ -386,10 +386,10 @@ describe('/shared-link', () => {
}); });
}); });
describe('DELETE /shared-link/:id/assets', () => { describe('DELETE /shared-links/:id/assets', () => {
it('should not remove assets from a shared link (album)', async () => { it('should not remove assets from a shared link (album)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/shared-link/${linkWithAlbum.id}/assets`) .delete(`/shared-links/${linkWithAlbum.id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ assetIds: [asset2.id] }); .send({ assetIds: [asset2.id] });
@ -399,7 +399,7 @@ describe('/shared-link', () => {
it('should remove assets from a shared link (individual)', async () => { it('should remove assets from a shared link (individual)', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/shared-link/${linkWithAssets.id}/assets`) .delete(`/shared-links/${linkWithAssets.id}/assets`)
.set('Authorization', `Bearer ${user1.accessToken}`) .set('Authorization', `Bearer ${user1.accessToken}`)
.send({ assetIds: [asset2.id] }); .send({ assetIds: [asset2.id] });
@ -408,9 +408,9 @@ describe('/shared-link', () => {
}); });
}); });
describe('DELETE /shared-link/:id', () => { describe('DELETE /shared-links/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).delete(`/shared-link/${linkWithAlbum.id}`); const { status, body } = await request(app).delete(`/shared-links/${linkWithAlbum.id}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
@ -418,7 +418,7 @@ describe('/shared-link', () => {
it('should fail if invalid link', async () => { it('should fail if invalid link', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/shared-link/${uuidDto.notFound}`) .delete(`/shared-links/${uuidDto.notFound}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(400); expect(status).toBe(400);
@ -427,7 +427,7 @@ describe('/shared-link', () => {
it('should delete a shared link', async () => { it('should delete a shared link', async () => {
const { status } = await request(app) const { status } = await request(app)
.delete(`/shared-link/${linkWithAlbum.id}`) .delete(`/shared-links/${linkWithAlbum.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);

View file

@ -6,7 +6,7 @@ import { app, asBearerAuth, utils } from 'src/utils';
import request from 'supertest'; import request from 'supertest';
import { afterAll, beforeAll, describe, expect, it } from 'vitest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest';
describe('/user', () => { describe('/users', () => {
let websocket: Socket; let websocket: Socket;
let admin: LoginResponseDto; let admin: LoginResponseDto;
@ -34,15 +34,15 @@ describe('/user', () => {
utils.disconnectWebsocket(websocket); utils.disconnectWebsocket(websocket);
}); });
describe('GET /user', () => { describe('GET /users', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get('/user'); const { status, body } = await request(app).get('/users');
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should get users', async () => { it('should get users', async () => {
const { status, body } = await request(app).get('/user').set('Authorization', `Bearer ${admin.accessToken}`); const { status, body } = await request(app).get('/users').set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(200); expect(status).toEqual(200);
expect(body).toHaveLength(5); expect(body).toHaveLength(5);
expect(body).toEqual( expect(body).toEqual(
@ -58,7 +58,7 @@ describe('/user', () => {
it('should hide deleted users', async () => { it('should hide deleted users', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/user`) .get(`/users`)
.query({ isAll: true }) .query({ isAll: true })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -75,7 +75,7 @@ describe('/user', () => {
it('should include deleted users', async () => { it('should include deleted users', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/user`) .get(`/users`)
.query({ isAll: false }) .query({ isAll: false })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
@ -93,15 +93,15 @@ describe('/user', () => {
}); });
}); });
describe('GET /user/info/:id', () => { describe('GET /users/info/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status } = await request(app).get(`/user/info/${admin.userId}`); const { status } = await request(app).get(`/users/info/${admin.userId}`);
expect(status).toEqual(401); expect(status).toEqual(401);
}); });
it('should get the user info', async () => { it('should get the user info', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/user/info/${admin.userId}`) .get(`/users/info/${admin.userId}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toMatchObject({ expect(body).toMatchObject({
@ -111,15 +111,15 @@ describe('/user', () => {
}); });
}); });
describe('GET /user/me', () => { describe('GET /users/me', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).get(`/user/me`); const { status, body } = await request(app).get(`/users/me`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should get my info', async () => { it('should get my info', async () => {
const { status, body } = await request(app).get(`/user/me`).set('Authorization', `Bearer ${admin.accessToken}`); const { status, body } = await request(app).get(`/users/me`).set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toMatchObject({ expect(body).toMatchObject({
id: admin.userId, id: admin.userId,
@ -128,9 +128,9 @@ describe('/user', () => {
}); });
}); });
describe('POST /user', () => { describe('POST /users', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).post(`/user`).send(createUserDto.user1); const { status, body } = await request(app).post(`/users`).send(createUserDto.user1);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
@ -138,7 +138,7 @@ describe('/user', () => {
for (const key of Object.keys(createUserDto.user1)) { for (const key of Object.keys(createUserDto.user1)) {
it(`should not allow null ${key}`, async () => { it(`should not allow null ${key}`, async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/user`) .post(`/users`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ ...createUserDto.user1, [key]: null }); .send({ ...createUserDto.user1, [key]: null });
expect(status).toBe(400); expect(status).toBe(400);
@ -148,7 +148,7 @@ describe('/user', () => {
it('should ignore `isAdmin`', async () => { it('should ignore `isAdmin`', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/user`) .post(`/users`)
.send({ .send({
isAdmin: true, isAdmin: true,
email: 'user5@immich.cloud', email: 'user5@immich.cloud',
@ -166,7 +166,7 @@ describe('/user', () => {
it('should create a user without memories enabled', async () => { it('should create a user without memories enabled', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.post(`/user`) .post(`/users`)
.send({ .send({
email: 'no-memories@immich.cloud', email: 'no-memories@immich.cloud',
password: 'Password123', password: 'Password123',
@ -182,16 +182,16 @@ describe('/user', () => {
}); });
}); });
describe('DELETE /user/:id', () => { describe('DELETE /users/:id', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).delete(`/user/${userToDelete.userId}`); const { status, body } = await request(app).delete(`/users/${userToDelete.userId}`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
it('should delete user', async () => { it('should delete user', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/user/${userToDelete.userId}`) .delete(`/users/${userToDelete.userId}`)
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@ -204,7 +204,7 @@ describe('/user', () => {
it('should hard delete user', async () => { it('should hard delete user', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/user/${userToHardDelete.userId}`) .delete(`/users/${userToHardDelete.userId}`)
.send({ force: true }) .send({ force: true })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
@ -219,9 +219,9 @@ describe('/user', () => {
}); });
}); });
describe('PUT /user', () => { describe('PUT /users', () => {
it('should require authentication', async () => { it('should require authentication', async () => {
const { status, body } = await request(app).put(`/user`); const { status, body } = await request(app).put(`/users`);
expect(status).toBe(401); expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized); expect(body).toEqual(errorDto.unauthorized);
}); });
@ -229,7 +229,7 @@ describe('/user', () => {
for (const key of Object.keys(userDto.admin)) { for (const key of Object.keys(userDto.admin)) {
it(`should not allow null ${key}`, async () => { it(`should not allow null ${key}`, async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/user`) .put(`/users`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ ...userDto.admin, [key]: null }); .send({ ...userDto.admin, [key]: null });
expect(status).toBe(400); expect(status).toBe(400);
@ -239,7 +239,7 @@ describe('/user', () => {
it('should not allow a non-admin to become an admin', async () => { it('should not allow a non-admin to become an admin', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/user`) .put(`/users`)
.send({ isAdmin: true, id: nonAdmin.userId }) .send({ isAdmin: true, id: nonAdmin.userId })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
@ -249,7 +249,7 @@ describe('/user', () => {
it('ignores updates to profileImagePath', async () => { it('ignores updates to profileImagePath', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/user`) .put(`/users`)
.send({ id: admin.userId, profileImagePath: 'invalid.jpg' }) .send({ id: admin.userId, profileImagePath: 'invalid.jpg' })
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
@ -261,7 +261,7 @@ describe('/user', () => {
const before = await getUserById({ id: admin.userId }, { headers: asBearerAuth(admin.accessToken) }); const before = await getUserById({ id: admin.userId }, { headers: asBearerAuth(admin.accessToken) });
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/user`) .put(`/users`)
.send({ .send({
id: admin.userId, id: admin.userId,
name: 'Name', name: 'Name',
@ -280,7 +280,7 @@ describe('/user', () => {
it('should update memories enabled', async () => { it('should update memories enabled', async () => {
const before = await getUserById({ id: admin.userId }, { headers: asBearerAuth(admin.accessToken) }); const before = await getUserById({ id: admin.userId }, { headers: asBearerAuth(admin.accessToken) });
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/user`) .put(`/users`)
.send({ .send({
id: admin.userId, id: admin.userId,
memoriesEnabled: false, memoriesEnabled: false,

View file

@ -77,5 +77,5 @@ String getThumbnailUrlForRemoteId(
} }
String getFaceThumbnailUrl(final String personId) { String getFaceThumbnailUrl(final String personId) {
return '${Store.get(StoreKey.serverEndpoint)}/person/$personId/thumbnail'; return '${Store.get(StoreKey.serverEndpoint)}/people/$personId/thumbnail';
} }

BIN
mobile/openapi/README.md generated

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,7 +1,7 @@
{ {
"openapi": "3.0.0", "openapi": "3.0.0",
"paths": { "paths": {
"/activity": { "/activities": {
"get": { "get": {
"operationId": "getActivities", "operationId": "getActivities",
"parameters": [ "parameters": [
@ -120,7 +120,7 @@
] ]
} }
}, },
"/activity/statistics": { "/activities/statistics": {
"get": { "get": {
"operationId": "getActivityStatistics", "operationId": "getActivityStatistics",
"parameters": [ "parameters": [
@ -171,7 +171,7 @@
] ]
} }
}, },
"/activity/{id}": { "/activities/{id}": {
"delete": { "delete": {
"operationId": "deleteActivity", "operationId": "deleteActivity",
"parameters": [ "parameters": [
@ -206,7 +206,7 @@
] ]
} }
}, },
"/album": { "/albums": {
"get": { "get": {
"operationId": "getAllAlbums", "operationId": "getAllAlbums",
"parameters": [ "parameters": [
@ -300,7 +300,7 @@
] ]
} }
}, },
"/album/count": { "/albums/count": {
"get": { "get": {
"operationId": "getAlbumCount", "operationId": "getAlbumCount",
"parameters": [], "parameters": [],
@ -332,7 +332,7 @@
] ]
} }
}, },
"/album/{id}": { "/albums/{id}": {
"delete": { "delete": {
"operationId": "deleteAlbum", "operationId": "deleteAlbum",
"parameters": [ "parameters": [
@ -473,7 +473,7 @@
] ]
} }
}, },
"/album/{id}/assets": { "/albums/{id}/assets": {
"delete": { "delete": {
"operationId": "removeAssetFromAlbum", "operationId": "removeAssetFromAlbum",
"parameters": [ "parameters": [
@ -589,7 +589,7 @@
] ]
} }
}, },
"/album/{id}/user/{userId}": { "/albums/{id}/user/{userId}": {
"delete": { "delete": {
"operationId": "removeUserFromAlbum", "operationId": "removeUserFromAlbum",
"parameters": [ "parameters": [
@ -683,7 +683,7 @@
] ]
} }
}, },
"/album/{id}/users": { "/albums/{id}/users": {
"put": { "put": {
"operationId": "addUsersToAlbum", "operationId": "addUsersToAlbum",
"parameters": [ "parameters": [
@ -735,7 +735,7 @@
] ]
} }
}, },
"/api-key": { "/api-keys": {
"get": { "get": {
"operationId": "getApiKeys", "operationId": "getApiKeys",
"parameters": [], "parameters": [],
@ -810,7 +810,7 @@
] ]
} }
}, },
"/api-key/{id}": { "/api-keys/{id}": {
"delete": { "delete": {
"operationId": "deleteApiKey", "operationId": "deleteApiKey",
"parameters": [ "parameters": [
@ -2256,7 +2256,7 @@
] ]
} }
}, },
"/face": { "/faces": {
"get": { "get": {
"operationId": "getFaces", "operationId": "getFaces",
"parameters": [ "parameters": [
@ -2301,7 +2301,7 @@
] ]
} }
}, },
"/face/{id}": { "/faces/{id}": {
"put": { "put": {
"operationId": "reassignFacesById", "operationId": "reassignFacesById",
"parameters": [ "parameters": [
@ -2436,7 +2436,7 @@
] ]
} }
}, },
"/library": { "/libraries": {
"get": { "get": {
"operationId": "getAllLibraries", "operationId": "getAllLibraries",
"parameters": [], "parameters": [],
@ -2511,7 +2511,7 @@
] ]
} }
}, },
"/library/{id}": { "/libraries/{id}": {
"delete": { "delete": {
"operationId": "deleteLibrary", "operationId": "deleteLibrary",
"parameters": [ "parameters": [
@ -2636,7 +2636,7 @@
] ]
} }
}, },
"/library/{id}/removeOffline": { "/libraries/{id}/removeOffline": {
"post": { "post": {
"operationId": "removeOfflineFiles", "operationId": "removeOfflineFiles",
"parameters": [ "parameters": [
@ -2671,7 +2671,7 @@
] ]
} }
}, },
"/library/{id}/scan": { "/libraries/{id}/scan": {
"post": { "post": {
"operationId": "scanLibrary", "operationId": "scanLibrary",
"parameters": [ "parameters": [
@ -2716,7 +2716,7 @@
] ]
} }
}, },
"/library/{id}/statistics": { "/libraries/{id}/statistics": {
"get": { "get": {
"operationId": "getLibraryStatistics", "operationId": "getLibraryStatistics",
"parameters": [ "parameters": [
@ -2758,7 +2758,7 @@
] ]
} }
}, },
"/library/{id}/validate": { "/libraries/{id}/validate": {
"post": { "post": {
"operationId": "validate", "operationId": "validate",
"parameters": [ "parameters": [
@ -3268,7 +3268,7 @@
] ]
} }
}, },
"/partner": { "/partners": {
"get": { "get": {
"operationId": "getPartners", "operationId": "getPartners",
"parameters": [ "parameters": [
@ -3316,7 +3316,7 @@
] ]
} }
}, },
"/partner/{id}": { "/partners/{id}": {
"delete": { "delete": {
"operationId": "removePartner", "operationId": "removePartner",
"parameters": [ "parameters": [
@ -3441,7 +3441,7 @@
] ]
} }
}, },
"/person": { "/people": {
"get": { "get": {
"operationId": "getAllPeople", "operationId": "getAllPeople",
"parameters": [ "parameters": [
@ -3565,7 +3565,7 @@
] ]
} }
}, },
"/person/{id}": { "/people/{id}": {
"get": { "get": {
"operationId": "getPerson", "operationId": "getPerson",
"parameters": [ "parameters": [
@ -3657,7 +3657,7 @@
] ]
} }
}, },
"/person/{id}/assets": { "/people/{id}/assets": {
"get": { "get": {
"operationId": "getPersonAssets", "operationId": "getPersonAssets",
"parameters": [ "parameters": [
@ -3702,7 +3702,7 @@
] ]
} }
}, },
"/person/{id}/merge": { "/people/{id}/merge": {
"post": { "post": {
"operationId": "mergePerson", "operationId": "mergePerson",
"parameters": [ "parameters": [
@ -3757,7 +3757,7 @@
] ]
} }
}, },
"/person/{id}/reassign": { "/people/{id}/reassign": {
"put": { "put": {
"operationId": "reassignFaces", "operationId": "reassignFaces",
"parameters": [ "parameters": [
@ -3812,7 +3812,7 @@
] ]
} }
}, },
"/person/{id}/statistics": { "/people/{id}/statistics": {
"get": { "get": {
"operationId": "getPersonStatistics", "operationId": "getPersonStatistics",
"parameters": [ "parameters": [
@ -3854,7 +3854,7 @@
] ]
} }
}, },
"/person/{id}/thumbnail": { "/people/{id}/thumbnail": {
"get": { "get": {
"operationId": "getPersonThumbnail", "operationId": "getPersonThumbnail",
"parameters": [ "parameters": [
@ -3897,7 +3897,7 @@
] ]
} }
}, },
"/report": { "/reports": {
"get": { "get": {
"operationId": "getAuditFiles", "operationId": "getAuditFiles",
"parameters": [], "parameters": [],
@ -3929,7 +3929,7 @@
] ]
} }
}, },
"/report/checksum": { "/reports/checksum": {
"post": { "post": {
"operationId": "getFileChecksums", "operationId": "getFileChecksums",
"parameters": [], "parameters": [],
@ -3974,7 +3974,7 @@
] ]
} }
}, },
"/report/fix": { "/reports/fix": {
"post": { "post": {
"operationId": "fixAuditFiles", "operationId": "fixAuditFiles",
"parameters": [], "parameters": [],
@ -4656,7 +4656,7 @@
] ]
} }
}, },
"/shared-link": { "/shared-links": {
"get": { "get": {
"operationId": "getAllSharedLinks", "operationId": "getAllSharedLinks",
"parameters": [], "parameters": [],
@ -4731,7 +4731,7 @@
] ]
} }
}, },
"/shared-link/me": { "/shared-links/me": {
"get": { "get": {
"operationId": "getMySharedLink", "operationId": "getMySharedLink",
"parameters": [ "parameters": [
@ -4789,7 +4789,7 @@
] ]
} }
}, },
"/shared-link/{id}": { "/shared-links/{id}": {
"delete": { "delete": {
"operationId": "removeSharedLink", "operationId": "removeSharedLink",
"parameters": [ "parameters": [
@ -4914,7 +4914,7 @@
] ]
} }
}, },
"/shared-link/{id}/assets": { "/shared-links/{id}/assets": {
"delete": { "delete": {
"operationId": "removeSharedLinkAssets", "operationId": "removeSharedLinkAssets",
"parameters": [ "parameters": [
@ -5407,7 +5407,7 @@
] ]
} }
}, },
"/tag": { "/tags": {
"get": { "get": {
"operationId": "getAllTags", "operationId": "getAllTags",
"parameters": [], "parameters": [],
@ -5482,7 +5482,7 @@
] ]
} }
}, },
"/tag/{id}": { "/tags/{id}": {
"delete": { "delete": {
"operationId": "deleteTag", "operationId": "deleteTag",
"parameters": [ "parameters": [
@ -5607,7 +5607,7 @@
] ]
} }
}, },
"/tag/{id}/assets": { "/tags/{id}/assets": {
"delete": { "delete": {
"operationId": "untagAssets", "operationId": "untagAssets",
"parameters": [ "parameters": [
@ -6105,7 +6105,7 @@
] ]
} }
}, },
"/user": { "/users": {
"get": { "get": {
"operationId": "getAllUsers", "operationId": "getAllUsers",
"parameters": [ "parameters": [
@ -6229,7 +6229,7 @@
] ]
} }
}, },
"/user/info/{id}": { "/users/info/{id}": {
"get": { "get": {
"operationId": "getUserById", "operationId": "getUserById",
"parameters": [ "parameters": [
@ -6271,7 +6271,7 @@
] ]
} }
}, },
"/user/me": { "/users/me": {
"get": { "get": {
"operationId": "getMyUserInfo", "operationId": "getMyUserInfo",
"parameters": [], "parameters": [],
@ -6303,7 +6303,7 @@
] ]
} }
}, },
"/user/profile-image": { "/users/profile-image": {
"delete": { "delete": {
"operationId": "deleteProfileImage", "operationId": "deleteProfileImage",
"parameters": [], "parameters": [],
@ -6369,7 +6369,7 @@
] ]
} }
}, },
"/user/profile-image/{id}": { "/users/profile-image/{id}": {
"get": { "get": {
"operationId": "getProfileImage", "operationId": "getProfileImage",
"parameters": [ "parameters": [
@ -6412,7 +6412,7 @@
] ]
} }
}, },
"/user/{id}": { "/users/{id}": {
"delete": { "delete": {
"operationId": "deleteUser", "operationId": "deleteUser",
"parameters": [ "parameters": [
@ -6464,7 +6464,7 @@
] ]
} }
}, },
"/user/{id}/restore": { "/users/{id}/restore": {
"post": { "post": {
"operationId": "restoreUser", "operationId": "restoreUser",
"parameters": [ "parameters": [

View file

@ -1106,7 +1106,7 @@ export function getActivities({ albumId, assetId, level, $type, userId }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: ActivityResponseDto[]; data: ActivityResponseDto[];
}>(`/activity${QS.query(QS.explode({ }>(`/activities${QS.query(QS.explode({
albumId, albumId,
assetId, assetId,
level, level,
@ -1122,7 +1122,7 @@ export function createActivity({ activityCreateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: ActivityResponseDto; data: ActivityResponseDto;
}>("/activity", oazapfts.json({ }>("/activities", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: activityCreateDto body: activityCreateDto
@ -1135,7 +1135,7 @@ export function getActivityStatistics({ albumId, assetId }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: ActivityStatisticsResponseDto; data: ActivityStatisticsResponseDto;
}>(`/activity/statistics${QS.query(QS.explode({ }>(`/activities/statistics${QS.query(QS.explode({
albumId, albumId,
assetId assetId
}))}`, { }))}`, {
@ -1145,7 +1145,7 @@ export function getActivityStatistics({ albumId, assetId }: {
export function deleteActivity({ id }: { export function deleteActivity({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/activity/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/activities/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -1157,7 +1157,7 @@ export function getAllAlbums({ assetId, shared }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AlbumResponseDto[]; data: AlbumResponseDto[];
}>(`/album${QS.query(QS.explode({ }>(`/albums${QS.query(QS.explode({
assetId, assetId,
shared shared
}))}`, { }))}`, {
@ -1170,7 +1170,7 @@ export function createAlbum({ createAlbumDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: AlbumResponseDto; data: AlbumResponseDto;
}>("/album", oazapfts.json({ }>("/albums", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: createAlbumDto body: createAlbumDto
@ -1180,14 +1180,14 @@ export function getAlbumCount(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AlbumCountResponseDto; data: AlbumCountResponseDto;
}>("/album/count", { }>("/albums/count", {
...opts ...opts
})); }));
} }
export function deleteAlbum({ id }: { export function deleteAlbum({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/album/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/albums/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -1200,7 +1200,7 @@ export function getAlbumInfo({ id, key, withoutAssets }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AlbumResponseDto; data: AlbumResponseDto;
}>(`/album/${encodeURIComponent(id)}${QS.query(QS.explode({ }>(`/albums/${encodeURIComponent(id)}${QS.query(QS.explode({
key, key,
withoutAssets withoutAssets
}))}`, { }))}`, {
@ -1214,7 +1214,7 @@ export function updateAlbumInfo({ id, updateAlbumDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AlbumResponseDto; data: AlbumResponseDto;
}>(`/album/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/albums/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PATCH", method: "PATCH",
body: updateAlbumDto body: updateAlbumDto
@ -1227,7 +1227,7 @@ export function removeAssetFromAlbum({ id, bulkIdsDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: BulkIdResponseDto[]; data: BulkIdResponseDto[];
}>(`/album/${encodeURIComponent(id)}/assets`, oazapfts.json({ }>(`/albums/${encodeURIComponent(id)}/assets`, oazapfts.json({
...opts, ...opts,
method: "DELETE", method: "DELETE",
body: bulkIdsDto body: bulkIdsDto
@ -1241,7 +1241,7 @@ export function addAssetsToAlbum({ id, key, bulkIdsDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: BulkIdResponseDto[]; data: BulkIdResponseDto[];
}>(`/album/${encodeURIComponent(id)}/assets${QS.query(QS.explode({ }>(`/albums/${encodeURIComponent(id)}/assets${QS.query(QS.explode({
key key
}))}`, oazapfts.json({ }))}`, oazapfts.json({
...opts, ...opts,
@ -1253,7 +1253,7 @@ export function removeUserFromAlbum({ id, userId }: {
id: string; id: string;
userId: string; userId: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/album/${encodeURIComponent(id)}/user/${encodeURIComponent(userId)}`, { return oazapfts.ok(oazapfts.fetchText(`/albums/${encodeURIComponent(id)}/user/${encodeURIComponent(userId)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -1263,7 +1263,7 @@ export function updateAlbumUser({ id, userId, updateAlbumUserDto }: {
userId: string; userId: string;
updateAlbumUserDto: UpdateAlbumUserDto; updateAlbumUserDto: UpdateAlbumUserDto;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/album/${encodeURIComponent(id)}/user/${encodeURIComponent(userId)}`, oazapfts.json({ return oazapfts.ok(oazapfts.fetchText(`/albums/${encodeURIComponent(id)}/user/${encodeURIComponent(userId)}`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: updateAlbumUserDto body: updateAlbumUserDto
@ -1276,7 +1276,7 @@ export function addUsersToAlbum({ id, addUsersDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AlbumResponseDto; data: AlbumResponseDto;
}>(`/album/${encodeURIComponent(id)}/users`, oazapfts.json({ }>(`/albums/${encodeURIComponent(id)}/users`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: addUsersDto body: addUsersDto
@ -1286,7 +1286,7 @@ export function getApiKeys(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: ApiKeyResponseDto[]; data: ApiKeyResponseDto[];
}>("/api-key", { }>("/api-keys", {
...opts ...opts
})); }));
} }
@ -1296,7 +1296,7 @@ export function createApiKey({ apiKeyCreateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: ApiKeyCreateResponseDto; data: ApiKeyCreateResponseDto;
}>("/api-key", oazapfts.json({ }>("/api-keys", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: apiKeyCreateDto body: apiKeyCreateDto
@ -1305,7 +1305,7 @@ export function createApiKey({ apiKeyCreateDto }: {
export function deleteApiKey({ id }: { export function deleteApiKey({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/api-key/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/api-keys/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -1316,7 +1316,7 @@ export function getApiKey({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: ApiKeyResponseDto; data: ApiKeyResponseDto;
}>(`/api-key/${encodeURIComponent(id)}`, { }>(`/api-keys/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -1327,7 +1327,7 @@ export function updateApiKey({ id, apiKeyUpdateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: ApiKeyResponseDto; data: ApiKeyResponseDto;
}>(`/api-key/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/api-keys/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: apiKeyUpdateDto body: apiKeyUpdateDto
@ -1712,7 +1712,7 @@ export function getFaces({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetFaceResponseDto[]; data: AssetFaceResponseDto[];
}>(`/face${QS.query(QS.explode({ }>(`/faces${QS.query(QS.explode({
id id
}))}`, { }))}`, {
...opts ...opts
@ -1725,7 +1725,7 @@ export function reassignFacesById({ id, faceDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PersonResponseDto; data: PersonResponseDto;
}>(`/face/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/faces/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: faceDto body: faceDto
@ -1756,7 +1756,7 @@ export function getAllLibraries(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: LibraryResponseDto[]; data: LibraryResponseDto[];
}>("/library", { }>("/libraries", {
...opts ...opts
})); }));
} }
@ -1766,7 +1766,7 @@ export function createLibrary({ createLibraryDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: LibraryResponseDto; data: LibraryResponseDto;
}>("/library", oazapfts.json({ }>("/libraries", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: createLibraryDto body: createLibraryDto
@ -1775,7 +1775,7 @@ export function createLibrary({ createLibraryDto }: {
export function deleteLibrary({ id }: { export function deleteLibrary({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/library/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/libraries/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -1786,7 +1786,7 @@ export function getLibrary({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: LibraryResponseDto; data: LibraryResponseDto;
}>(`/library/${encodeURIComponent(id)}`, { }>(`/libraries/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -1797,7 +1797,7 @@ export function updateLibrary({ id, updateLibraryDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: LibraryResponseDto; data: LibraryResponseDto;
}>(`/library/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/libraries/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: updateLibraryDto body: updateLibraryDto
@ -1806,7 +1806,7 @@ export function updateLibrary({ id, updateLibraryDto }: {
export function removeOfflineFiles({ id }: { export function removeOfflineFiles({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/library/${encodeURIComponent(id)}/removeOffline`, { return oazapfts.ok(oazapfts.fetchText(`/libraries/${encodeURIComponent(id)}/removeOffline`, {
...opts, ...opts,
method: "POST" method: "POST"
})); }));
@ -1815,7 +1815,7 @@ export function scanLibrary({ id, scanLibraryDto }: {
id: string; id: string;
scanLibraryDto: ScanLibraryDto; scanLibraryDto: ScanLibraryDto;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/library/${encodeURIComponent(id)}/scan`, oazapfts.json({ return oazapfts.ok(oazapfts.fetchText(`/libraries/${encodeURIComponent(id)}/scan`, oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: scanLibraryDto body: scanLibraryDto
@ -1827,7 +1827,7 @@ export function getLibraryStatistics({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: LibraryStatsResponseDto; data: LibraryStatsResponseDto;
}>(`/library/${encodeURIComponent(id)}/statistics`, { }>(`/libraries/${encodeURIComponent(id)}/statistics`, {
...opts ...opts
})); }));
} }
@ -1838,7 +1838,7 @@ export function validate({ id, validateLibraryDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: ValidateLibraryResponseDto; data: ValidateLibraryResponseDto;
}>(`/library/${encodeURIComponent(id)}/validate`, oazapfts.json({ }>(`/libraries/${encodeURIComponent(id)}/validate`, oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: validateLibraryDto body: validateLibraryDto
@ -1977,7 +1977,7 @@ export function getPartners({ direction }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PartnerResponseDto[]; data: PartnerResponseDto[];
}>(`/partner${QS.query(QS.explode({ }>(`/partners${QS.query(QS.explode({
direction direction
}))}`, { }))}`, {
...opts ...opts
@ -1986,7 +1986,7 @@ export function getPartners({ direction }: {
export function removePartner({ id }: { export function removePartner({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/partner/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/partners/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -1997,7 +1997,7 @@ export function createPartner({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: PartnerResponseDto; data: PartnerResponseDto;
}>(`/partner/${encodeURIComponent(id)}`, { }>(`/partners/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "POST" method: "POST"
})); }));
@ -2009,7 +2009,7 @@ export function updatePartner({ id, updatePartnerDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PartnerResponseDto; data: PartnerResponseDto;
}>(`/partner/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/partners/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: updatePartnerDto body: updatePartnerDto
@ -2021,7 +2021,7 @@ export function getAllPeople({ withHidden }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PeopleResponseDto; data: PeopleResponseDto;
}>(`/person${QS.query(QS.explode({ }>(`/people${QS.query(QS.explode({
withHidden withHidden
}))}`, { }))}`, {
...opts ...opts
@ -2033,7 +2033,7 @@ export function createPerson({ personCreateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: PersonResponseDto; data: PersonResponseDto;
}>("/person", oazapfts.json({ }>("/people", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: personCreateDto body: personCreateDto
@ -2045,7 +2045,7 @@ export function updatePeople({ peopleUpdateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: BulkIdResponseDto[]; data: BulkIdResponseDto[];
}>("/person", oazapfts.json({ }>("/people", oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: peopleUpdateDto body: peopleUpdateDto
@ -2057,7 +2057,7 @@ export function getPerson({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PersonResponseDto; data: PersonResponseDto;
}>(`/person/${encodeURIComponent(id)}`, { }>(`/people/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -2068,7 +2068,7 @@ export function updatePerson({ id, personUpdateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PersonResponseDto; data: PersonResponseDto;
}>(`/person/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/people/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: personUpdateDto body: personUpdateDto
@ -2080,7 +2080,7 @@ export function getPersonAssets({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetResponseDto[]; data: AssetResponseDto[];
}>(`/person/${encodeURIComponent(id)}/assets`, { }>(`/people/${encodeURIComponent(id)}/assets`, {
...opts ...opts
})); }));
} }
@ -2091,7 +2091,7 @@ export function mergePerson({ id, mergePersonDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: BulkIdResponseDto[]; data: BulkIdResponseDto[];
}>(`/person/${encodeURIComponent(id)}/merge`, oazapfts.json({ }>(`/people/${encodeURIComponent(id)}/merge`, oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: mergePersonDto body: mergePersonDto
@ -2104,7 +2104,7 @@ export function reassignFaces({ id, assetFaceUpdateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PersonResponseDto[]; data: PersonResponseDto[];
}>(`/person/${encodeURIComponent(id)}/reassign`, oazapfts.json({ }>(`/people/${encodeURIComponent(id)}/reassign`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: assetFaceUpdateDto body: assetFaceUpdateDto
@ -2116,7 +2116,7 @@ export function getPersonStatistics({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: PersonStatisticsResponseDto; data: PersonStatisticsResponseDto;
}>(`/person/${encodeURIComponent(id)}/statistics`, { }>(`/people/${encodeURIComponent(id)}/statistics`, {
...opts ...opts
})); }));
} }
@ -2126,7 +2126,7 @@ export function getPersonThumbnail({ id }: {
return oazapfts.ok(oazapfts.fetchBlob<{ return oazapfts.ok(oazapfts.fetchBlob<{
status: 200; status: 200;
data: Blob; data: Blob;
}>(`/person/${encodeURIComponent(id)}/thumbnail`, { }>(`/people/${encodeURIComponent(id)}/thumbnail`, {
...opts ...opts
})); }));
} }
@ -2134,7 +2134,7 @@ export function getAuditFiles(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: FileReportDto; data: FileReportDto;
}>("/report", { }>("/reports", {
...opts ...opts
})); }));
} }
@ -2144,7 +2144,7 @@ export function getFileChecksums({ fileChecksumDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: FileChecksumResponseDto[]; data: FileChecksumResponseDto[];
}>("/report/checksum", oazapfts.json({ }>("/reports/checksum", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: fileChecksumDto body: fileChecksumDto
@ -2153,7 +2153,7 @@ export function getFileChecksums({ fileChecksumDto }: {
export function fixAuditFiles({ fileReportFixDto }: { export function fixAuditFiles({ fileReportFixDto }: {
fileReportFixDto: FileReportFixDto; fileReportFixDto: FileReportFixDto;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText("/report/fix", oazapfts.json({ return oazapfts.ok(oazapfts.fetchText("/reports/fix", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: fileReportFixDto body: fileReportFixDto
@ -2346,7 +2346,7 @@ export function getAllSharedLinks(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: SharedLinkResponseDto[]; data: SharedLinkResponseDto[];
}>("/shared-link", { }>("/shared-links", {
...opts ...opts
})); }));
} }
@ -2356,7 +2356,7 @@ export function createSharedLink({ sharedLinkCreateDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: SharedLinkResponseDto; data: SharedLinkResponseDto;
}>("/shared-link", oazapfts.json({ }>("/shared-links", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: sharedLinkCreateDto body: sharedLinkCreateDto
@ -2370,7 +2370,7 @@ export function getMySharedLink({ key, password, token }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: SharedLinkResponseDto; data: SharedLinkResponseDto;
}>(`/shared-link/me${QS.query(QS.explode({ }>(`/shared-links/me${QS.query(QS.explode({
key, key,
password, password,
token token
@ -2381,7 +2381,7 @@ export function getMySharedLink({ key, password, token }: {
export function removeSharedLink({ id }: { export function removeSharedLink({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/shared-link/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/shared-links/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -2392,7 +2392,7 @@ export function getSharedLinkById({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: SharedLinkResponseDto; data: SharedLinkResponseDto;
}>(`/shared-link/${encodeURIComponent(id)}`, { }>(`/shared-links/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -2403,7 +2403,7 @@ export function updateSharedLink({ id, sharedLinkEditDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: SharedLinkResponseDto; data: SharedLinkResponseDto;
}>(`/shared-link/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/shared-links/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PATCH", method: "PATCH",
body: sharedLinkEditDto body: sharedLinkEditDto
@ -2417,7 +2417,7 @@ export function removeSharedLinkAssets({ id, key, assetIdsDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetIdsResponseDto[]; data: AssetIdsResponseDto[];
}>(`/shared-link/${encodeURIComponent(id)}/assets${QS.query(QS.explode({ }>(`/shared-links/${encodeURIComponent(id)}/assets${QS.query(QS.explode({
key key
}))}`, oazapfts.json({ }))}`, oazapfts.json({
...opts, ...opts,
@ -2433,7 +2433,7 @@ export function addSharedLinkAssets({ id, key, assetIdsDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetIdsResponseDto[]; data: AssetIdsResponseDto[];
}>(`/shared-link/${encodeURIComponent(id)}/assets${QS.query(QS.explode({ }>(`/shared-links/${encodeURIComponent(id)}/assets${QS.query(QS.explode({
key key
}))}`, oazapfts.json({ }))}`, oazapfts.json({
...opts, ...opts,
@ -2544,7 +2544,7 @@ export function getAllTags(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: TagResponseDto[]; data: TagResponseDto[];
}>("/tag", { }>("/tags", {
...opts ...opts
})); }));
} }
@ -2554,7 +2554,7 @@ export function createTag({ createTagDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: TagResponseDto; data: TagResponseDto;
}>("/tag", oazapfts.json({ }>("/tags", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: createTagDto body: createTagDto
@ -2563,7 +2563,7 @@ export function createTag({ createTagDto }: {
export function deleteTag({ id }: { export function deleteTag({ id }: {
id: string; id: string;
}, opts?: Oazapfts.RequestOpts) { }, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/tag/${encodeURIComponent(id)}`, { return oazapfts.ok(oazapfts.fetchText(`/tags/${encodeURIComponent(id)}`, {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -2574,7 +2574,7 @@ export function getTagById({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: TagResponseDto; data: TagResponseDto;
}>(`/tag/${encodeURIComponent(id)}`, { }>(`/tags/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -2585,7 +2585,7 @@ export function updateTag({ id, updateTagDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: TagResponseDto; data: TagResponseDto;
}>(`/tag/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/tags/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "PATCH", method: "PATCH",
body: updateTagDto body: updateTagDto
@ -2598,7 +2598,7 @@ export function untagAssets({ id, assetIdsDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetIdsResponseDto[]; data: AssetIdsResponseDto[];
}>(`/tag/${encodeURIComponent(id)}/assets`, oazapfts.json({ }>(`/tags/${encodeURIComponent(id)}/assets`, oazapfts.json({
...opts, ...opts,
method: "DELETE", method: "DELETE",
body: assetIdsDto body: assetIdsDto
@ -2610,7 +2610,7 @@ export function getTagAssets({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetResponseDto[]; data: AssetResponseDto[];
}>(`/tag/${encodeURIComponent(id)}/assets`, { }>(`/tags/${encodeURIComponent(id)}/assets`, {
...opts ...opts
})); }));
} }
@ -2621,7 +2621,7 @@ export function tagAssets({ id, assetIdsDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: AssetIdsResponseDto[]; data: AssetIdsResponseDto[];
}>(`/tag/${encodeURIComponent(id)}/assets`, oazapfts.json({ }>(`/tags/${encodeURIComponent(id)}/assets`, oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: assetIdsDto body: assetIdsDto
@ -2720,7 +2720,7 @@ export function getAllUsers({ isAll }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: UserResponseDto[]; data: UserResponseDto[];
}>(`/user${QS.query(QS.explode({ }>(`/users${QS.query(QS.explode({
isAll isAll
}))}`, { }))}`, {
...opts ...opts
@ -2732,7 +2732,7 @@ export function createUser({ createUserDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: UserResponseDto; data: UserResponseDto;
}>("/user", oazapfts.json({ }>("/users", oazapfts.json({
...opts, ...opts,
method: "POST", method: "POST",
body: createUserDto body: createUserDto
@ -2744,7 +2744,7 @@ export function updateUser({ updateUserDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: UserResponseDto; data: UserResponseDto;
}>("/user", oazapfts.json({ }>("/users", oazapfts.json({
...opts, ...opts,
method: "PUT", method: "PUT",
body: updateUserDto body: updateUserDto
@ -2756,7 +2756,7 @@ export function getUserById({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: UserResponseDto; data: UserResponseDto;
}>(`/user/info/${encodeURIComponent(id)}`, { }>(`/users/info/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -2764,12 +2764,12 @@ export function getMyUserInfo(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: UserResponseDto; data: UserResponseDto;
}>("/user/me", { }>("/users/me", {
...opts ...opts
})); }));
} }
export function deleteProfileImage(opts?: Oazapfts.RequestOpts) { export function deleteProfileImage(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText("/user/profile-image", { return oazapfts.ok(oazapfts.fetchText("/users/profile-image", {
...opts, ...opts,
method: "DELETE" method: "DELETE"
})); }));
@ -2780,7 +2780,7 @@ export function createProfileImage({ createProfileImageDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: CreateProfileImageResponseDto; data: CreateProfileImageResponseDto;
}>("/user/profile-image", oazapfts.multipart({ }>("/users/profile-image", oazapfts.multipart({
...opts, ...opts,
method: "POST", method: "POST",
body: createProfileImageDto body: createProfileImageDto
@ -2792,7 +2792,7 @@ export function getProfileImage({ id }: {
return oazapfts.ok(oazapfts.fetchBlob<{ return oazapfts.ok(oazapfts.fetchBlob<{
status: 200; status: 200;
data: Blob; data: Blob;
}>(`/user/profile-image/${encodeURIComponent(id)}`, { }>(`/users/profile-image/${encodeURIComponent(id)}`, {
...opts ...opts
})); }));
} }
@ -2803,7 +2803,7 @@ export function deleteUser({ id, deleteUserDto }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 200; status: 200;
data: UserResponseDto; data: UserResponseDto;
}>(`/user/${encodeURIComponent(id)}`, oazapfts.json({ }>(`/users/${encodeURIComponent(id)}`, oazapfts.json({
...opts, ...opts,
method: "DELETE", method: "DELETE",
body: deleteUserDto body: deleteUserDto
@ -2815,7 +2815,7 @@ export function restoreUser({ id }: {
return oazapfts.ok(oazapfts.fetchJson<{ return oazapfts.ok(oazapfts.fetchJson<{
status: 201; status: 201;
data: UserResponseDto; data: UserResponseDto;
}>(`/user/${encodeURIComponent(id)}/restore`, { }>(`/users/${encodeURIComponent(id)}/restore`, {
...opts, ...opts,
method: "POST" method: "POST"
})); }));

View file

@ -14,7 +14,7 @@ import { ActivityService } from 'src/services/activity.service';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Activity') @ApiTags('Activity')
@Controller('activity') @Controller('activities')
export class ActivityController { export class ActivityController {
constructor(private service: ActivityService) {} constructor(private service: ActivityService) {}

View file

@ -17,7 +17,7 @@ import { AlbumService } from 'src/services/album.service';
import { ParseMeUUIDPipe, UUIDParamDto } from 'src/validation'; import { ParseMeUUIDPipe, UUIDParamDto } from 'src/validation';
@ApiTags('Album') @ApiTags('Album')
@Controller('album') @Controller('albums')
export class AlbumController { export class AlbumController {
constructor(private service: AlbumService) {} constructor(private service: AlbumService) {}

View file

@ -7,7 +7,7 @@ import { APIKeyService } from 'src/services/api-key.service';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('API Key') @ApiTags('API Key')
@Controller('api-key') @Controller('api-keys')
export class APIKeyController { export class APIKeyController {
constructor(private service: APIKeyService) {} constructor(private service: APIKeyService) {}

View file

@ -7,7 +7,7 @@ import { PersonService } from 'src/services/person.service';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Face') @ApiTags('Face')
@Controller('face') @Controller('faces')
export class FaceController { export class FaceController {
constructor(private service: PersonService) {} constructor(private service: PersonService) {}

View file

@ -5,7 +5,7 @@ import { Authenticated } from 'src/middleware/auth.guard';
import { AuditService } from 'src/services/audit.service'; import { AuditService } from 'src/services/audit.service';
@ApiTags('File Report') @ApiTags('File Report')
@Controller('report') @Controller('reports')
export class ReportController { export class ReportController {
constructor(private service: AuditService) {} constructor(private service: AuditService) {}

View file

@ -14,7 +14,7 @@ import { LibraryService } from 'src/services/library.service';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Library') @ApiTags('Library')
@Controller('library') @Controller('libraries')
export class LibraryController { export class LibraryController {
constructor(private service: LibraryService) {} constructor(private service: LibraryService) {}

View file

@ -8,7 +8,7 @@ import { PartnerService } from 'src/services/partner.service';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Partner') @ApiTags('Partner')
@Controller('partner') @Controller('partners')
export class PartnerController { export class PartnerController {
constructor(private service: PartnerService) {} constructor(private service: PartnerService) {}

View file

@ -22,7 +22,7 @@ import { sendFile } from 'src/utils/file';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Person') @ApiTags('Person')
@Controller('person') @Controller('people')
export class PersonController { export class PersonController {
constructor( constructor(
private service: PersonService, private service: PersonService,

View file

@ -17,7 +17,7 @@ import { respondWithCookie } from 'src/utils/response';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Shared Link') @ApiTags('Shared Link')
@Controller('shared-link') @Controller('shared-links')
export class SharedLinkController { export class SharedLinkController {
constructor(private service: SharedLinkService) {} constructor(private service: SharedLinkService) {}

View file

@ -10,7 +10,7 @@ import { TagService } from 'src/services/tag.service';
import { UUIDParamDto } from 'src/validation'; import { UUIDParamDto } from 'src/validation';
@ApiTags('Tag') @ApiTags('Tag')
@Controller('tag') @Controller('tags')
export class TagController { export class TagController {
constructor(private service: TagService) {} constructor(private service: TagService) {}

View file

@ -13,7 +13,7 @@ import { AssetService, UploadFile } from 'src/services/asset.service';
export enum Route { export enum Route {
ASSET = 'asset', ASSET = 'asset',
USER = 'user', USER = 'users',
} }
export interface ImmichFile extends Express.Multer.File { export interface ImmichFile extends Express.Multer.File {

View file

@ -174,7 +174,7 @@ export const getProfileImageUrl = (...[userId]: [string]) => {
}; };
export const getPeopleThumbnailUrl = (personId: string) => { export const getPeopleThumbnailUrl = (personId: string) => {
const path = `/person/${personId}/thumbnail`; const path = `/people/${personId}/thumbnail`;
return createUrl(path); return createUrl(path);
}; };