11package lol .maki .dev .todo ;
22
3+ import am .ik .yavi .arguments .Arguments ;
4+ import am .ik .yavi .arguments .Arguments2 ;
5+ import am .ik .yavi .arguments .Arguments2Validator ;
6+ import am .ik .yavi .arguments .Arguments7 ;
37import am .ik .yavi .arguments .Arguments7Validator ;
48import am .ik .yavi .arguments .BooleanValidator ;
5- import am .ik .yavi .arguments .InstantValidator ;
69import am .ik .yavi .arguments .StringValidator ;
710import am .ik .yavi .builder .BooleanValidatorBuilder ;
8- import am .ik .yavi .builder .InstantValidatorBuilder ;
911import am .ik .yavi .builder .StringValidatorBuilder ;
12+ import am .ik .yavi .core .Constraint ;
13+ import am .ik .yavi .validator .Yavi ;
1014import com .fasterxml .jackson .annotation .JsonInclude ;
1115import java .time .Instant ;
1216import java .util .function .Function ;
1620public record Todo (String todoId , String todoTitle , boolean finished , Instant createdAt , String createdBy ,
1721 Instant updatedAt , String updatedBy ) {
1822
19- private static Function <String , InstantValidator <Instant >> instantValidator = (
20- name ) -> InstantValidatorBuilder .of (name , c -> c .notNull ()).build ();
21-
22- private static Function <String , StringValidator <String >> usernameValidator = (
23- name ) -> StringValidatorBuilder .of (name , c -> c .notBlank ().lessThanOrEqual (255 )).build ();
24-
2523 public static StringValidator <String > todoIdValidator = StringValidatorBuilder
2624 .of ("todoId" , c -> c .notBlank ().lessThanOrEqual (255 ))
2725 .build ();
@@ -33,22 +31,27 @@ public record Todo(String todoId, String todoTitle, boolean finished, Instant cr
3331 public static BooleanValidator <Boolean > finishedValidator = BooleanValidatorBuilder .of ("finished" , c -> c .notNull ())
3432 .build ();
3533
36- public static InstantValidator <Instant > createdAtValidator = instantValidator .apply ("createdAt" );
37-
38- public static InstantValidator <Instant > updatedAtValidator = instantValidator .apply ("updatedAt" );
39-
40- public static StringValidator <String > createdByValidator = usernameValidator .apply ("createdBy" );
41-
42- public static StringValidator <String > updatedByValidator = usernameValidator .apply ("updatedBy" );
43-
44- public static Arguments7Validator <String , String , Boolean , Instant , String , Instant , String , Todo > validator = todoIdValidator
45- .split (todoTitleValidator )
46- .split (finishedValidator )
47- .split (createdAtValidator )
48- .split (createdByValidator )
49- .split (updatedAtValidator )
50- .split (updatedByValidator )
51- .apply (Todo ::new );
34+ private static final Function <String , Arguments2Validator <Instant , String , Arguments2 <Instant , String >>> auditInfoValidator = name -> Yavi
35+ .arguments ()
36+ ._instant (name + "At" , Constraint ::notNull )
37+ ._string (name + "By" , c -> c .notBlank ().lessThanOrEqual (255 ))
38+ .apply (Arguments ::of );
39+
40+ public static final Arguments2Validator <Instant , String , Arguments2 <Instant , String >> createdValidator = auditInfoValidator
41+ .apply ("created" );
42+
43+ public static final Arguments2Validator <Instant , String , Arguments2 <Instant , String >> updatedValidator = auditInfoValidator
44+ .apply ("updated" );
45+
46+ public static Arguments7Validator <String , String , Boolean , Instant , String , Instant , String , Todo > validator = Arguments7Validator
47+ .unwrap (todoTitleValidator .split (todoTitleValidator )
48+ .split (finishedValidator )
49+ .apply (Arguments ::of )
50+ .<Arguments7 <String , String , Boolean , Instant , String , Instant , String >>compose (Arguments7 ::first3 )
51+ .combine (createdValidator .compose (args -> Arguments .of (args .arg4 (), args .arg5 ())))
52+ .combine (updatedValidator .compose (args -> Arguments .of (args .arg6 (), args .arg7 ())))
53+ .apply ((a1 , a2 , a3 ) -> new Todo (a1 .arg1 (), a1 .arg2 (), a1 .arg3 (), a2 .arg1 (), a2 .arg2 (), a3 .arg1 (),
54+ a3 .arg2 ())));
5255
5356 @ Builder (className = "TodoBuilder" , factoryMethod = "todo" , toBuilder = "from" , packageName = "lol.maki.dev.todo" )
5457 public static Todo create (String todoId , String todoTitle , boolean finished , Instant createdAt , String createdBy ,
0 commit comments