NameRuleController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\NamingRule\AutonameRequest;
  5. use App\Http\Requests\API\NamingRule\CombinationSettingRequest;
  6. use App\Http\Requests\API\NamingRule\CreateOrUpdateRequest;
  7. use App\Http\Requests\API\NamingRule\ParseRequest;
  8. use App\Http\Resources\API\NamingRuleCombinationResource;
  9. use App\Http\Resources\API\NamingRuleResource;
  10. use App\Http\Resources\API\NamingRuleSimpleResource;
  11. use App\Models\Asset;
  12. use App\Models\CustomField;
  13. use App\Models\Enums\LibraryType;
  14. use App\Models\NamingRule;
  15. use App\Models\Project;
  16. use App\Services\NamingRule\NamingRuleCheck;
  17. use Illuminate\Http\Request;
  18. use Illuminate\Support\Facades\Auth;
  19. use Illuminate\Support\Facades\DB;
  20. class NameRuleController extends Controller
  21. {
  22. /**
  23. * Display a listing of the resource.
  24. */
  25. public function index(Request $request)
  26. {
  27. $pageSize=$request->get('page_size') ?? 10;
  28. $sort=$request->input('sort','desc');
  29. $namingRules = NamingRule::allowed()->with(['company'])->filter($request->all())->orderBy('created_at',$sort)->paginate($pageSize);
  30. if(Auth::user()->super_admin){
  31. $namingRules->transform(function (NamingRule $namingRules) {
  32. $namingRules->display_id = $namingRules->id;
  33. return $namingRules;
  34. });
  35. return NamingRuleResource::collection($namingRules);
  36. }
  37. return NamingRuleResource::collection($namingRules);
  38. }
  39. /**
  40. * Store a newly created resource in storage.
  41. */
  42. public function store(CreateOrUpdateRequest $request)
  43. {
  44. $formData = $request->only(['name', 'status', 'company_id', 'global']);
  45. if (! Auth::user()->super_admin) {
  46. $formData['company_id'] = Auth::user()->company_id;
  47. unset($formData['global']);
  48. }
  49. NamingRule::create($formData);
  50. return $this->created();
  51. }
  52. /**
  53. * Display the specified resource.
  54. */
  55. public function show(string $id)
  56. {
  57. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  58. return new NamingRuleResource($namingRule);
  59. }
  60. /**
  61. * Update the specified resource in storage.
  62. */
  63. public function update(CreateOrUpdateRequest $request, string $id)
  64. {
  65. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  66. $namingRule->fill($request->only([
  67. 'name', 'status', 'global'
  68. ]));
  69. $namingRule->save();
  70. return $this->noContent();
  71. }
  72. /**
  73. * Remove the specified resource from storage.
  74. */
  75. public function destroy(string $id)
  76. {
  77. DB::transaction(function () use ($id) {
  78. $namerule = NamingRule::query()->allowed()->findOrFail($id);
  79. $namerule->delete();
  80. $customfield = CustomField::query()->where('group', $id);
  81. if (!empty($customfield)) {
  82. $customfield->delete();
  83. }
  84. });
  85. return $this->noContent();
  86. }
  87. public function enabled()
  88. {
  89. $namingRules = NamingRule::where('status', 1)->where(function ($query) {
  90. return $query->where("company_id", Auth::user()->company_id)->orWhere(function ($query){
  91. $query->where('company_id',0)->where( 'global',1);
  92. });
  93. })->select(['id', 'name'])->get();
  94. return $this->success([
  95. 'data' => $namingRules
  96. ]);
  97. }
  98. public function combinationSetting(CombinationSettingRequest $request, string $id)
  99. {
  100. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  101. $namingRule->combination_rules = $request->all();
  102. $namingRule->save();
  103. return $this->noContent();
  104. }
  105. public function combinationShow(string $id){
  106. $nameRule=NamingRule::query()->allowed()->findOrFail($id);
  107. return new NamingRuleCombinationResource($nameRule);
  108. }
  109. public function autoname(AutonameRequest $request, string $id)
  110. {
  111. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  112. if (! $namingRule->combination_rules) {
  113. return $this->badRequest("Please set naming combination rules");
  114. }
  115. $code = match ($request->code_type) {
  116. "project","container_project"=> Project::query()->find($request->code_id)?->code,
  117. "container_asset" => Asset::query()->find($request->code_id)?->code,
  118. "container_custom"=>'custom',
  119. default => ""
  120. };
  121. if (! $code) {
  122. return $this->badRequest("The supported type or selected item does not exist");
  123. }
  124. $name = $code;
  125. foreach ($namingRule->combination_rules as $rule) {
  126. if (! isset($request->fields[$rule['field']])) {
  127. return $this->badRequest(sprintf("%s field is required", $rule['field']));
  128. }
  129. $name .= $rule['link'] . $request->fields[$rule['field']];
  130. }
  131. return $this->success([
  132. 'data' => $name
  133. ]);
  134. }
  135. public function parse(ParseRequest $request, string $id)
  136. {
  137. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  138. if (! $namingRule->combination_rules) {
  139. return $this->badRequest("Please set naming combination rules");
  140. }
  141. $code = match (LibraryType::from($request->object_type)) {
  142. LibraryType::PROJECT => Project::query()->find($request->object_id)?->code,
  143. LibraryType::ASSET => Asset::query()->find($request->object_id)?->code,
  144. LibraryType::CUSTOM =>"custom",
  145. };
  146. $namingRuleCheck = new NamingRuleCheck();
  147. $items = [];
  148. foreach ($request->names as $name) {
  149. $items[] = [
  150. 'name' => $name,
  151. ...$namingRuleCheck->checkByName($name, $namingRule, $code)
  152. ];
  153. }
  154. return $this->success([
  155. 'data' => $items,
  156. ]);
  157. }
  158. }