web-player: share form limits between client and server and extract form parsers
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import { formString } from '$lib/server/api';
|
||||
import { ALBUM_EARLIEST_YEAR, LIMITS } from '$lib/validation';
|
||||
|
||||
interface AlbumFormBody {
|
||||
title: string;
|
||||
description: string | null;
|
||||
releaseYear: number | null;
|
||||
}
|
||||
|
||||
export function parseAlbumForm(form: FormData): { body: AlbumFormBody } | { failMessage: string } {
|
||||
const title = formString(form, 'title').trim();
|
||||
if (title === '' || title.length > LIMITS.albumTitle) {
|
||||
return { failMessage: `El título es obligatorio (máx. ${LIMITS.albumTitle} caracteres).` };
|
||||
}
|
||||
|
||||
const description = formString(form, 'description').trim();
|
||||
if (description.length > LIMITS.albumDescription) {
|
||||
return {
|
||||
failMessage: `La descripción no puede pasar de ${LIMITS.albumDescription} caracteres.`
|
||||
};
|
||||
}
|
||||
|
||||
const rawYear = formString(form, 'releaseYear').trim();
|
||||
const latestYear = new Date().getFullYear() + 1;
|
||||
let releaseYear: number | null = null;
|
||||
|
||||
if (rawYear !== '') {
|
||||
const parsed = Number(rawYear);
|
||||
if (!Number.isInteger(parsed) || parsed < ALBUM_EARLIEST_YEAR || parsed > latestYear) {
|
||||
return { failMessage: `El año debe estar entre ${ALBUM_EARLIEST_YEAR} y ${latestYear}.` };
|
||||
}
|
||||
releaseYear = parsed;
|
||||
}
|
||||
|
||||
return {
|
||||
body: {
|
||||
title,
|
||||
description: description === '' ? null : description,
|
||||
releaseYear
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user