ArticleInProcess.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. namespace internship\controller\process;
  3. use n2n\util\type\attrs\DataMap;
  4. use n2n\web\http\controller\impl\ControllingUtils;
  5. use n2n\web\http\controller\impl\HttpData;
  6. use n2n\web\http\controller\impl\ExecResult;
  7. use n2n\bind\build\impl\Bind;
  8. use n2n\bind\mapper\impl\Mappers;
  9. use n2n\validation\validator\impl\Validators;
  10. use internship\bo\Article;
  11. use internship\bo\CategoryName;
  12. class ArticleInProcess {
  13. private DataMap $dataMap;
  14. public function __construct(private ControllingUtils $cu) {
  15. }
  16. /**
  17. * @param HttpData $httpData
  18. * @return ExecResult
  19. */
  20. function in(HttpData $httpData, ?Article $article = null): ExecResult {
  21. $this->dataMap = new DataMap();
  22. $mustExist = $article === null;
  23. return $this->cu->exec(Bind::attrs($httpData)->toAttrs($this->dataMap)
  24. ->dynProp('categoryName', $mustExist, Mappers::cleanString(true), Validators::enum(
  25. ['international', 'national', 'sport']))
  26. ->dynProp('text', $mustExist, Mappers::cleanString(true, maxlength: 9999) )
  27. ->dynProp('title', $mustExist, Mappers::cleanString(true, minlength: 3, maxlength: 255)));
  28. }
  29. function out(Article $article): Article {
  30. $this->cu->exec(Bind::attrs($this->dataMap)->toObj($article)
  31. ->optProp('categoryName',
  32. Validators::enum(['international', 'national', 'sport']),
  33. Mappers::valueClosure(function ($categoryNameStr) {
  34. return CategoryName::tryFrom($categoryNameStr);
  35. }))
  36. ->optProp('text', Mappers::cleanString(true, maxlength: 9999) )
  37. ->optProp('title', Mappers::cleanString(true, minlength: 3, maxlength: 255)));
  38. return $article;
  39. }
  40. }