45 lines
836 B
TypeScript
45 lines
836 B
TypeScript
export interface ApiItem<T> {
|
|
created: string;
|
|
deleted?: string;
|
|
id: number;
|
|
item?: T;
|
|
modified: string;
|
|
}
|
|
|
|
export interface DatabaseEntry {
|
|
created: Date;
|
|
deleted: Date | null;
|
|
id: number;
|
|
modified: Date;
|
|
}
|
|
|
|
export function createdResponse<T extends DatabaseEntry>({ id }: T) {
|
|
return { id };
|
|
}
|
|
|
|
export function itemResponse<T>(data: T & DatabaseEntry): ApiItem<T> {
|
|
const { id, created, modified, deleted, ...rest } = data;
|
|
const res: ApiItem<T> = {
|
|
id: id,
|
|
created: created.toISOString(),
|
|
modified: modified.toISOString(),
|
|
};
|
|
|
|
if (deleted) {
|
|
res.deleted = deleted.toISOString();
|
|
}
|
|
|
|
res.item = rest as T;
|
|
|
|
return res;
|
|
}
|
|
|
|
export function itemsResponse<T>(data: (T & DatabaseEntry)[]): ApiItem<T>[] {
|
|
const res: ApiItem<T>[] = [];
|
|
for (const item of data) {
|
|
res.push(itemResponse(item));
|
|
}
|
|
|
|
return res;
|
|
}
|