schemas.ts
Ricky/StrongPassword/backend/src/validation/schemas.ts
import { z } from 'zod';
export const createRecordSchema = z.object({
username: z.string()
.min(3, 'Username must be at least 3 characters')
.max(50, 'Username must be at most 50 characters')
.regex(/^[A-Za-z0-9_\-\.]+$/, 'Username can only contain letters, numbers, underscores, hyphens, and dots'),
email: z.string()
.email('Invalid email format'),
password: z.string()
.min(8, 'Password must be at least 8 characters')
.max(128, 'Password must be at most 128 characters')
.refine((password) => {
const hasLower = /[a-z]/.test(password);
const hasUpper = /[A-Z]/.test(password);
const hasDigit = /\d/.test(password);
const hasSymbol = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password);
const classes = [hasLower, hasUpper, hasDigit, hasSymbol].filter(Boolean);
return classes.length >= 3;
}, 'Password must contain at least 3 character classes (lowercase, uppercase, digits, symbols)')
});
export const updateRecordSchema = z.object({
username: z.string()
.min(3, 'Username must be at least 3 characters')
.max(50, 'Username must be at most 50 characters')
.regex(/^[A-Za-z0-9_\-\.]+$/, 'Username can only contain letters, numbers, underscores, hyphens, and dots')
.optional(),
email: z.string()
.email('Invalid email format')
.optional(),
password: z.string()
.min(8, 'Password must be at least 8 characters')
.max(128, 'Password must be at most 128 characters')
.refine((password) => {
const hasLower = /[a-z]/.test(password);
const hasUpper = /[A-Z]/.test(password);
const hasDigit = /\d/.test(password);
const hasSymbol = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password);
const classes = [hasLower, hasUpper, hasDigit, hasSymbol].filter(Boolean);
return classes.length >= 3;
}, 'Password must contain at least 3 character classes (lowercase, uppercase, digits, symbols)')
.optional()
}).refine((data) => Object.keys(data).length > 0, {
message: 'At least one field must be provided for update'
});
export type CreateRecordInput = z.infer<typeof createRecordSchema>;
export type UpdateRecordInput = z.infer<typeof updateRecordSchema>;
関連記事
__init__.py
__init__.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/__init__.py).
記事を読む →auth.py
auth.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/admin/auth.py).
記事を読む →routes.py
routes.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/admin/routes.py).
記事を読む →config.py
config.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/config.py).
記事を読む →admin_ingest.py
admin_ingest.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/routes/admin_ingest.py).
記事を読む →admin_stats.py
admin_stats.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/routes/admin_stats.py).
記事を読む →