40 lines
		
	
	
	
		
			890 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			890 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import vine from '@vinejs/vine'
 | |
| 
 | |
| const meals = vine.array(
 | |
|   vine.object({
 | |
|     date: vine.string(), // YYYY-MM-DD
 | |
|     meal_type: vine.string().in(['dinner', 'lunch']),
 | |
|   })
 | |
| )
 | |
| 
 | |
| export const createMealValidator = vine.compile(
 | |
|   vine.union([
 | |
|     vine.union.if(
 | |
|       (data) => vine.helpers.isObject(data) && 'meals' in data,
 | |
|       vine.object({
 | |
|         meals,
 | |
|       })
 | |
|     ),
 | |
|     vine.union.else(
 | |
|       vine.object({
 | |
|         date: vine.date(),
 | |
|         type: vine.string().in(['Déjeuner', 'Dîner']),
 | |
|         courses: vine
 | |
|           .array(
 | |
|             vine.object({
 | |
|               name: vine.string().minLength(1).maxLength(255),
 | |
|               description: vine.string().minLength(1),
 | |
|             })
 | |
|           )
 | |
|           .minLength(1),
 | |
|       })
 | |
|     ),
 | |
|   ])
 | |
| )
 | |
| 
 | |
| export const updateMealsRegistrationsValidator = vine.compile(
 | |
|   vine.object({
 | |
|     userId: vine.number().min(1),
 | |
|     meals,
 | |
|   })
 | |
| )
 | 
