u
This commit is contained in:
71
src/api/brand.js
Normal file
71
src/api/brand.js
Normal file
@@ -0,0 +1,71 @@
|
||||
import { http, httpBinary } from './http.js';
|
||||
|
||||
/**
|
||||
* Company-scoped brands (selectedCompanyId from session).
|
||||
* Shape: Brand = { id, name, gsprpinfo | null, pics: BrandPic[] }
|
||||
*/
|
||||
export const brand = {
|
||||
/**
|
||||
* GET /api/brand → { brands: Brand[], total, offset, limit }
|
||||
* @param {{ offset?: number, limit?: number, includeSmallThumbs?: boolean }} [params]
|
||||
*/
|
||||
list(params) {
|
||||
const offset = Number(params?.offset ?? 0);
|
||||
const limit = Number(params?.limit ?? 0);
|
||||
const includeSmallThumbs = params?.includeSmallThumbs;
|
||||
const query = new URLSearchParams();
|
||||
if (Number.isFinite(offset) && offset > 0) query.set('offset', String(offset));
|
||||
if (Number.isFinite(limit) && limit > 0) query.set('limit', String(limit));
|
||||
if (includeSmallThumbs != null) query.set('includeSmallThumbs', includeSmallThumbs ? 'true' : 'false');
|
||||
const qs = query.toString();
|
||||
return http(qs ? `/api/brand?${qs}` : '/api/brand');
|
||||
},
|
||||
|
||||
/**
|
||||
* POST /api/brand
|
||||
* Body: { name, gsprpinfo? } — insert for the selected company.
|
||||
* Empty name ⇒ 400 Invalid brand.
|
||||
* → 201 { brand: Brand } · 409 Brand already exists
|
||||
*/
|
||||
create(body) {
|
||||
return http('/api/brand', { method: 'POST', body });
|
||||
},
|
||||
|
||||
/**
|
||||
* PATCH /api/brand/:id
|
||||
* Body: { name, gsprpinfo? } — rename / update info.
|
||||
* → 200 { id, name, gsprpinfo, touchedArticleCount } · 404 Brand not found
|
||||
*/
|
||||
rename(id, body) {
|
||||
return http(`/api/brand/${encodeURIComponent(id)}`, { method: 'PATCH', body });
|
||||
},
|
||||
|
||||
/**
|
||||
* DELETE /api/brand/:id
|
||||
* → 204 No Content · 404 Brand not found
|
||||
*/
|
||||
delete(id) {
|
||||
return http(`/api/brand/${encodeURIComponent(id)}`, { method: 'DELETE' });
|
||||
},
|
||||
|
||||
/**
|
||||
* POST /api/brand/:id/image
|
||||
* Accepts full-size image body (Content-Type: image/webp).
|
||||
* → 201 { brand: { id, fullHash, thumbW, thumbH, thumbHash, pics } }
|
||||
*/
|
||||
addImage(brandId, file) {
|
||||
return httpBinary(`/api/brand/${brandId}/image`, {
|
||||
method: 'POST',
|
||||
contentType: file?.type || 'image/webp',
|
||||
body: file,
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* DELETE /api/brand/:id/image
|
||||
* → 200 { brand: { id, thumbW: null, thumbH: null, thumbHash: null, pics: [] } }
|
||||
*/
|
||||
deleteImage(brandId) {
|
||||
return http(`/api/brand/${brandId}/image`, { method: 'DELETE' });
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user