mirror of
https://github.com/immich-app/immich.git
synced 2025-06-01 04:36:58 -04:00
refactor(server): /user profile endpoint (#9669)
* refactor(server): user profile endpoint * chore: open api
This commit is contained in:
parent
ecd018a826
commit
8f37784eae
@ -6,7 +6,7 @@ import 'package:immich_mobile/entities/user.entity.dart';
|
|||||||
|
|
||||||
Widget userAvatar(BuildContext context, User u, {double? radius}) {
|
Widget userAvatar(BuildContext context, User u, {double? radius}) {
|
||||||
final url =
|
final url =
|
||||||
"${Store.get(StoreKey.serverEndpoint)}/user/profile-image/${u.id}";
|
"${Store.get(StoreKey.serverEndpoint)}/users/${u.id}/profile-image";
|
||||||
final nameFirstLetter = u.name.isNotEmpty ? u.name[0] : "";
|
final nameFirstLetter = u.name.isNotEmpty ? u.name[0] : "";
|
||||||
return CircleAvatar(
|
return CircleAvatar(
|
||||||
radius: radius,
|
radius: radius,
|
||||||
|
@ -24,7 +24,7 @@ class UserCircleAvatar extends ConsumerWidget {
|
|||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
bool isDarkTheme = Theme.of(context).brightness == Brightness.dark;
|
bool isDarkTheme = Theme.of(context).brightness == Brightness.dark;
|
||||||
final profileImageUrl =
|
final profileImageUrl =
|
||||||
'${Store.get(StoreKey.serverEndpoint)}/user/profile-image/${user.id}?d=${Random().nextInt(1024)}';
|
'${Store.get(StoreKey.serverEndpoint)}/users/${user.id}/profile-image?d=${Random().nextInt(1024)}';
|
||||||
|
|
||||||
final textIcon = Text(
|
final textIcon = Text(
|
||||||
user.name[0].toUpperCase(),
|
user.name[0].toUpperCase(),
|
||||||
|
2
mobile/openapi/README.md
generated
2
mobile/openapi/README.md
generated
@ -219,7 +219,7 @@ Class | Method | HTTP request | Description
|
|||||||
*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /users/{id} |
|
*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /users/{id} |
|
||||||
*UserApi* | [**getAllUsers**](doc//UserApi.md#getallusers) | **GET** /users |
|
*UserApi* | [**getAllUsers**](doc//UserApi.md#getallusers) | **GET** /users |
|
||||||
*UserApi* | [**getMyUserInfo**](doc//UserApi.md#getmyuserinfo) | **GET** /users/me |
|
*UserApi* | [**getMyUserInfo**](doc//UserApi.md#getmyuserinfo) | **GET** /users/me |
|
||||||
*UserApi* | [**getProfileImage**](doc//UserApi.md#getprofileimage) | **GET** /users/profile-image/{id} |
|
*UserApi* | [**getProfileImage**](doc//UserApi.md#getprofileimage) | **GET** /users/{id}/profile-image |
|
||||||
*UserApi* | [**getUserById**](doc//UserApi.md#getuserbyid) | **GET** /users/{id} |
|
*UserApi* | [**getUserById**](doc//UserApi.md#getuserbyid) | **GET** /users/{id} |
|
||||||
*UserApi* | [**restoreUser**](doc//UserApi.md#restoreuser) | **POST** /users/{id}/restore |
|
*UserApi* | [**restoreUser**](doc//UserApi.md#restoreuser) | **POST** /users/{id}/restore |
|
||||||
*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /users |
|
*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /users |
|
||||||
|
4
mobile/openapi/lib/api/user_api.dart
generated
4
mobile/openapi/lib/api/user_api.dart
generated
@ -298,13 +298,13 @@ class UserApi {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Performs an HTTP 'GET /users/profile-image/{id}' operation and returns the [Response].
|
/// Performs an HTTP 'GET /users/{id}/profile-image' operation and returns the [Response].
|
||||||
/// Parameters:
|
/// Parameters:
|
||||||
///
|
///
|
||||||
/// * [String] id (required):
|
/// * [String] id (required):
|
||||||
Future<Response> getProfileImageWithHttpInfo(String id,) async {
|
Future<Response> getProfileImageWithHttpInfo(String id,) async {
|
||||||
// ignore: prefer_const_declarations
|
// ignore: prefer_const_declarations
|
||||||
final path = r'/users/profile-image/{id}'
|
final path = r'/users/{id}/profile-image'
|
||||||
.replaceAll('{id}', id);
|
.replaceAll('{id}', id);
|
||||||
|
|
||||||
// ignore: prefer_final_locals
|
// ignore: prefer_final_locals
|
||||||
|
@ -6327,49 +6327,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/users/profile-image/{id}": {
|
|
||||||
"get": {
|
|
||||||
"operationId": "getProfileImage",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"name": "id",
|
|
||||||
"required": true,
|
|
||||||
"in": "path",
|
|
||||||
"schema": {
|
|
||||||
"format": "uuid",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"content": {
|
|
||||||
"application/octet-stream": {
|
|
||||||
"schema": {
|
|
||||||
"format": "binary",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"bearer": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cookie": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"api_key": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"User"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/users/{id}": {
|
"/users/{id}": {
|
||||||
"delete": {
|
"delete": {
|
||||||
"operationId": "deleteUser",
|
"operationId": "deleteUser",
|
||||||
@ -6462,6 +6419,49 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/users/{id}/profile-image": {
|
||||||
|
"get": {
|
||||||
|
"operationId": "getProfileImage",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"required": true,
|
||||||
|
"in": "path",
|
||||||
|
"schema": {
|
||||||
|
"format": "uuid",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"content": {
|
||||||
|
"application/octet-stream": {
|
||||||
|
"schema": {
|
||||||
|
"format": "binary",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"bearer": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cookie": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"api_key": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"User"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"/users/{id}/restore": {
|
"/users/{id}/restore": {
|
||||||
"post": {
|
"post": {
|
||||||
"operationId": "restoreUser",
|
"operationId": "restoreUser",
|
||||||
|
@ -2776,16 +2776,6 @@ export function createProfileImage({ createProfileImageDto }: {
|
|||||||
body: createProfileImageDto
|
body: createProfileImageDto
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
export function getProfileImage({ id }: {
|
|
||||||
id: string;
|
|
||||||
}, opts?: Oazapfts.RequestOpts) {
|
|
||||||
return oazapfts.ok(oazapfts.fetchBlob<{
|
|
||||||
status: 200;
|
|
||||||
data: Blob;
|
|
||||||
}>(`/users/profile-image/${encodeURIComponent(id)}`, {
|
|
||||||
...opts
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
export function deleteUser({ id, deleteUserDto }: {
|
export function deleteUser({ id, deleteUserDto }: {
|
||||||
id: string;
|
id: string;
|
||||||
deleteUserDto: DeleteUserDto;
|
deleteUserDto: DeleteUserDto;
|
||||||
@ -2809,6 +2799,16 @@ export function getUserById({ id }: {
|
|||||||
...opts
|
...opts
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
export function getProfileImage({ id }: {
|
||||||
|
id: string;
|
||||||
|
}, opts?: Oazapfts.RequestOpts) {
|
||||||
|
return oazapfts.ok(oazapfts.fetchBlob<{
|
||||||
|
status: 200;
|
||||||
|
data: Blob;
|
||||||
|
}>(`/users/${encodeURIComponent(id)}/profile-image`, {
|
||||||
|
...opts
|
||||||
|
}));
|
||||||
|
}
|
||||||
export function restoreUser({ id }: {
|
export function restoreUser({ id }: {
|
||||||
id: string;
|
id: string;
|
||||||
}, opts?: Oazapfts.RequestOpts) {
|
}, opts?: Oazapfts.RequestOpts) {
|
||||||
|
@ -101,7 +101,7 @@ export class UserController {
|
|||||||
return this.service.createProfileImage(auth, fileInfo);
|
return this.service.createProfileImage(auth, fileInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('profile-image/:id')
|
@Get(':id/profile-image')
|
||||||
@FileResponse()
|
@FileResponse()
|
||||||
@Authenticated()
|
@Authenticated()
|
||||||
async getProfileImage(@Res() res: Response, @Next() next: NextFunction, @Param() { id }: UUIDParamDto) {
|
async getProfileImage(@Res() res: Response, @Next() next: NextFunction, @Param() { id }: UUIDParamDto) {
|
||||||
|
@ -169,7 +169,7 @@ export const getAssetThumbnailUrl = (...[assetId, format]: [string, ThumbnailFor
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const getProfileImageUrl = (...[userId]: [string]) => {
|
export const getProfileImageUrl = (...[userId]: [string]) => {
|
||||||
const path = `/user/profile-image/${userId}`;
|
const path = `/users/${userId}/profile-image`;
|
||||||
return createUrl(path);
|
return createUrl(path);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user