From f388f093e35352b64979c58222f0b4521b7452d8 Mon Sep 17 00:00:00 2001 From: br0kenpixel <23280129+br0kenpixel@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:20:10 +0100 Subject: [PATCH] feat: implement internship creation and company listing --- .../Http/Controllers/CompanyController.php | 11 ++++ .../Http/Controllers/InternshipController.php | 54 ++++++++++++++++++- backend/routes/api.php | 13 ++++- 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/backend/app/Http/Controllers/CompanyController.php b/backend/app/Http/Controllers/CompanyController.php index 171eaad..fce832f 100644 --- a/backend/app/Http/Controllers/CompanyController.php +++ b/backend/app/Http/Controllers/CompanyController.php @@ -3,10 +3,21 @@ namespace App\Http\Controllers; use App\Models\Company; +use App\Models\User; use Illuminate\Http\Request; class CompanyController extends Controller { + public function all_simple() { + $companies = Company::all()->makeHidden(['created_at', 'updated_at']); + + $companies->each(function ($company) { + $company->contact = User::find($company->contact)->makeHidden(['created_at', 'updated_at', 'email_verified_at']); + }); + + return response()->json($companies); + } + /** * Display a listing of the resource. */ diff --git a/backend/app/Http/Controllers/InternshipController.php b/backend/app/Http/Controllers/InternshipController.php index 69599d1..5d2a680 100644 --- a/backend/app/Http/Controllers/InternshipController.php +++ b/backend/app/Http/Controllers/InternshipController.php @@ -53,7 +53,59 @@ class InternshipController extends Controller */ public function store(Request $request) { - // + $user = auth()->user(); + + $request->validate([ + 'company_id' => ['required', 'exists:companies,id'], + 'start' => ['required', 'date'], + 'end' => ['required', 'date', 'after:start'], + 'year_of_study' => ['required', 'integer', 'between:1,5'], + 'semester' => ['required', 'in:WINTER,SUMMER'], + 'position_description' => ['required', 'string', 'min:1'] + ]); + + $request->merge([ + 'start' => date('Y-m-d H:i:s', strtotime($request->start)), + 'end' => date('Y-m-d H:i:s', strtotime($request->end)) + ]); + + // je už nejaká prax ktorá sa časovo prekrýva? + $existingInternship = Internship::where('user_id', $user->id) + ->where(function ($query) use ($request) { + $query->whereBetween('start', [$request->start, $request->end]) + ->orWhereBetween('end', [$request->start, $request->end]) + ->orWhere(function ($q) use ($request) { + $q->where('start', '<=', $request->start) + ->where('end', '>=', $request->end); + }); + }) + ->exists(); + if ($existingInternship) { + return response()->json([ + 'message' => 'You already have an internship during this period.' + ], 422); + } + + $Internship = Internship::create([ + 'user_id' => $user->id, + 'company_id' => $request->company_id, + 'start' => $request->start, + 'end' => $request->end, + 'year_of_study' => $request->year_of_study, + 'semester' => $request->semester, + 'position_description' => $request->position_description, + 'agreement' => null + ]); + + InternshipStatus::create([ + 'internship_id' => $Internship->id, + 'status' => 'SUBMITTED', + 'changed' => now(), + 'note' => null, + 'modified_by' => $user->id + ]); + + return response()->noContent(); } /** diff --git a/backend/routes/api.php b/backend/routes/api.php index 196a44c..392241f 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -1,6 +1,7 @@ middleware(['guest', 'throttle:6,1']) ->name('password.reset'); -Route::get('/internships', [InternshipController::class, 'all'])->middleware(['auth'])->name("api.internships"); \ No newline at end of file +Route::prefix('/internships')->group(function () { + Route::get("/", [InternshipController::class, 'all'])->name("api.internships"); + + Route::middleware("auth:sanctum")->group(function () { + Route::put("/new", [InternshipController::class, 'store'])->name("api.internships.create"); + }); +}); + +Route::prefix('/companies')->middleware("auth:sanctum")->group(function () { + Route::get("/simple", [CompanyController::class, 'all_simple']); +}); \ No newline at end of file