refactor: enforce semantic values and numeric lint rules

This commit is contained in:
2026-09-13 14:37:25 +03:00
parent 24d332e063
commit 53c852b437
21 changed files with 190 additions and 47 deletions
@@ -1,6 +1,9 @@
import { z } from "zod";
import { validationMessage } from "@/shared/i18n";
const ISO_MONTH_LENGTH = 7;
const MAX_CARD_NAME_LENGTH = 100;
function bankToday() {
return new Intl.DateTimeFormat("en-CA", {
timeZone: "Europe/Moscow",
@@ -15,7 +18,7 @@ function bankDateInputValue(value: string) {
function bankMonth(value: string | null) {
return value && /^\d{4}-(0[1-9]|1[0-2])$/.test(value)
? value
: bankToday().slice(0, 7);
: bankToday().slice(0, ISO_MONTH_LENGTH);
}
function bankMoneyValue(value: string) {
return value
@@ -32,12 +35,15 @@ function moneyCents(value: string): bigint | null {
(normalized.startsWith("-") ? -1n : 1n)
);
}
const MIN_BALANCE_KOPECKS = -9_223_372_036_854_775_808n;
const MAX_BALANCE_KOPECKS = 9_223_372_036_854_775_807n;
const moneySchema = z.string().refine((value) => {
const cents = moneyCents(value);
return (
cents !== null &&
cents >= -9223372036854775808n &&
cents <= 9223372036854775807n
cents >= MIN_BALANCE_KOPECKS &&
cents <= MAX_BALANCE_KOPECKS
);
}, validationMessage("bank.validation.money"));
const positiveMoneySchema = moneySchema.refine((value) => {
@@ -60,11 +66,17 @@ const bankCardSchema = z.object({
.string()
.trim()
.min(1, validationMessage("bank.validation.name")(undefined))
.max(100, validationMessage("bank.validation.name")(undefined)),
.max(
MAX_CARD_NAME_LENGTH,
validationMessage("bank.validation.name")(undefined),
),
bankName: z
.string()
.trim()
.max(100, validationMessage("bank.validation.bankName")(undefined)),
.max(
MAX_CARD_NAME_LENGTH,
validationMessage("bank.validation.bankName")(undefined),
),
lastFour: z
.string()
.refine(