aboutsummaryrefslogtreecommitdiffstats
path: root/app/Http/Controllers/SubGroupController.php
blob: c540904717b1501e191317283d1a7b7d889f7c3f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php

namespace App\Http\Controllers;

use App\Models\SubGroup;
use App\Models\Group;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;

class SubGroupController extends Controller
{
    /**
     * Display a listing of sub-groups.
     */
    public function index(Request $request): View|JsonResponse
    {
        $query = SubGroup::with(['group', 'students']);

        if ($request->has('group_id') && $request->group_id) {
            $query->where('group_id', $request->group_id);
        }

        $subGroups = $query->get();

        if ($request->expectsJson()) {
            return response()->json($subGroups);
        }

        return view('sub-groups.index', compact('subGroups'));
    }

    /**
     * Show the form for creating a new sub-group.
     */
    public function create(): View
    {
        $groups = Group::pluck('name', 'id');
        return view('sub-groups.create', compact('groups'));
    }

    /**
     * Store a newly created sub-group.
     */
    public function store(Request $request): JsonResponse|RedirectResponse
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'group_id' => 'required|exists:groups,id',
        ]);

        $subGroup = SubGroup::create($validated);

        if ($request->expectsJson()) {
            return response()->json($subGroup->load('group'), 201);
        }

        return redirect()->route('sub-groups.index')->with('success', 'Sub group created successfully.');
    }

    /**
     * Display the specified sub-group.
     */
    public function show(Request $request, SubGroup $subGroup): View|JsonResponse
    {
        $subGroup->load(['group', 'students']);

        if ($request->expectsJson()) {
            return response()->json($subGroup);
        }

        return view('sub-groups.show', compact('subGroup'));
    }

    /**
     * Show the form for editing the specified sub-group.
     */
    public function edit(SubGroup $subGroup): View
    {
        $groups = Group::pluck('name', 'id');
        return view('sub-groups.edit', compact('subGroup', 'groups'));
    }

    /**
     * Update the specified sub-group.
     */
    public function update(Request $request, SubGroup $subGroup): JsonResponse|RedirectResponse
    {
        $validated = $request->validate([
            'name' => 'sometimes|required|string|max:255',
            'group_id' => 'sometimes|required|exists:groups,id',
        ]);

        $subGroup->update($validated);

        if ($request->expectsJson()) {
            return response()->json($subGroup->load('group'));
        }

        return redirect()->route('sub-groups.index')->with('success', 'Sub group updated successfully.');
    }

    /**
     * Remove the specified sub-group.
     */
    public function destroy(Request $request, SubGroup $subGroup): JsonResponse|RedirectResponse
    {
        $subGroup->delete();

        if ($request->expectsJson()) {
            return response()->json(null, 204);
        }

        return redirect()->route('sub-groups.index')->with('success', 'Sub group deleted successfully.');
    }

    /**
     * Get students in a sub-group.
     */
    public function students(SubGroup $subGroup): JsonResponse
    {
        return response()->json($subGroup->students);
    }
}