1+ <?php
2+
3+ /**
4+ * SPDX-License-Identifier: MIT
5+ * Copyright (c) 2017-2018 Tobias Reich
6+ * Copyright (c) 2018-2025 LycheeOrg.
7+ */
8+
9+ namespace App \Http \Controllers \Admin ;
10+
11+ use App \Http \Requests \UserGroup \CreateUserGroupRequest ;
12+ use App \Http \Requests \UserGroup \DeleteUserGroupRequest ;
13+ use App \Http \Requests \UserGroup \ListUserGroupRequest ;
14+ use App \Http \Requests \UserGroup \UpdateUserGroupRequest ;
15+ use App \Http \Resources \Collections \UserGroupDataResource ;
16+ use App \Http \Resources \Models \UserGroupResource ;
17+ use App \Models \UserGroup ;
18+ use Illuminate \Routing \Controller ;
19+ use Illuminate \Validation \ValidationException ;
20+
21+ /**
22+ * Controller responsible for user management.
23+ */
24+ class UserGroupsController extends Controller
25+ {
26+ /**
27+ * @return UserGroupDataResource
28+ */
29+ public function list (ListUserGroupRequest $ request ): UserGroupDataResource
30+ {
31+ return new UserGroupDataResource (UserGroup::with ('users ' )->get ());
32+ }
33+
34+ public function create (CreateUserGroupRequest $ request ): UserGroupResource
35+ {
36+ $ this ->validateUniqueGroupName ($ request ->name ());
37+
38+ $ user_group = UserGroup::create ([
39+ 'name ' => $ request ->name (),
40+ 'description ' => $ request ->description (),
41+ ]);
42+
43+ return new UserGroupResource ($ user_group );
44+ }
45+
46+ public function update (UpdateUserGroupRequest $ request ): UserGroupResource
47+ {
48+ $ this ->validateUniqueGroupName ($ request ->name (), $ request ->user_group ()->id );
49+
50+ $ request ->user_group ()->update ([
51+ 'name ' => $ request ->name (),
52+ 'description ' => $ request ->description (),
53+ ]);
54+
55+ return new UserGroupResource ($ request ->user_group ());
56+ }
57+
58+ public function delete (DeleteUserGroupRequest $ request ): void
59+ {
60+ $ request ->user_group ()->delete ();
61+ }
62+
63+ private function validateUniqueGroupName (string $ name , ?int $ exclude_id = null ): void
64+ {
65+ $ query = UserGroup::where ('name ' , $ name )
66+ ->when ($ exclude_id !== null , fn ($ q ) => $ q ->where ('id ' , '!= ' , $ exclude_id ));
67+
68+ if ($ query ->exists ()) {
69+ throw ValidationException::withMessages (['name ' => 'A group with this name already exists. ' ]);
70+ }
71+ }
72+ }
0 commit comments