simedkom/app/Http/Controllers/AuthController.php
2025-10-13 08:35:36 +07:00

184 lines
7.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\LoginRequest;
use App\Http\Requests\RegisterRequest;
use App\Models\Company;
use App\Models\Journalist;
use App\Models\Media;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class AuthController extends Controller
{
public function login()
{
return view('auth.login', [
'title' => 'Masuk',
]);
}
public function loginAction(LoginRequest $request)
{
$validatedData = $request->validated();
if (Auth::attempt(['email' => $validatedData['email'], 'password' => $validatedData['password']])) {
$request->session()->regenerate();
return redirect()->intended('/dashboard/overview');
} else {
return redirect()->back()->with('failed-status', 'Pastikan data dan akun sudah terdaftar.');
}
}
public function register()
{
return view('auth.register', [
'title' => 'Daftar',
'sample' => 'Hai',
]);
}
public function registerAction(RegisterRequest $request)
{
DB::beginTransaction();
try {
$validatedData = $request->validated();
$createdUser = User::create([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'password' => $validatedData['password'],
'status' => '0',
'role_id' => '3',
]);
$companyFiles = [
'company_director_nik_doc',
'company_deed_incorporation_doc',
'company_trade_license_doc',
'company_tax_id_number_doc',
'company_taxable_enterprise_doc',
'company_annual_tax_return_doc',
'company_domicile_certificate_doc',
'company_profile_doc',
];
$companyFileNames = [];
foreach ($companyFiles as $file) {
if ($request->hasFile($file)) {
$companyFileNames[$file] = store_file($validatedData[$file], '/uploads/companies')['randomFileName'];
} else {
$companyFileNames[$file] = null;
}
}
$createdCompany = Company::create([
'name' => $validatedData['company_name'],
'email' => $validatedData['company_email'],
'address' => $validatedData['company_address'],
'director_name' => $validatedData['company_director_name'],
'director_nik' => $validatedData['company_director_nik'],
'director_nik_doc' => $companyFileNames['company_director_nik_doc'],
'deed_incorporation' => $validatedData['company_deed_incorporation'],
'deed_incorporation_doc' => $companyFileNames['company_deed_incorporation_doc'],
'trade_license' => $validatedData['company_trade_license'],
'trade_license_doc' => $companyFileNames['company_trade_license_doc'],
'tax_id_number' => $validatedData['company_tax_id_number'],
'tax_id_number_doc' => $companyFileNames['company_tax_id_number_doc'],
'taxable_enterprise' => $validatedData['company_taxable_enterprise'],
'taxable_enterprise_doc' => $companyFileNames['company_taxable_enterprise_doc'],
'annual_tax_return' => $validatedData['company_annual_tax_return'],
'annual_tax_return_doc' => $companyFileNames['company_annual_tax_return_doc'],
'domicile_certificate' => $validatedData['company_domicile_certificate'],
'domicile_certificate_doc' => $companyFileNames['company_domicile_certificate_doc'],
'profile' => $validatedData['company_profile'],
'profile_doc' => $companyFileNames['company_profile_doc'],
'user_id' => $createdUser->id,
]);
$mediaFiles = [
'media_journalism_organization_doc',
'media_press_council_certificate_doc',
];
$mediaFileNames = [];
foreach ($mediaFiles as $file) {
if ($request->hasFile($file)) {
$mediaFileNames[$file] = store_file($validatedData[$file], '/uploads/media')['randomFileName'];
} else {
$mediaFileNames[$file] = null;
}
}
$createdMedia = Media::create([
'name' => $validatedData['media_name'],
'address' => $validatedData['media_address'],
'link' => $validatedData['media_link'],
'type' => $validatedData['media_type'],
'classification' => $validatedData['media_classification'],
'journalism_organization' => $validatedData['media_journalism_organization'],
'journalism_organization_doc' => $mediaFileNames['media_journalism_organization_doc'],
'press_council_certificate' => $validatedData['media_press_council_certificate'],
'press_council_certificate_doc' => $mediaFileNames['media_press_council_certificate_doc'],
'company_id' => $createdCompany->id,
]);
$journalistFiles = [
'journalist_press_card_doc',
'journalist_ukw_sertificate_doc',
];
$journalistFileNames = [];
foreach ($journalistFiles as $file) {
if ($request->hasFile($file)) {
$journalistFileNames[$file] = store_file($validatedData[$file], '/uploads/journalists')['randomFileName'];
} else {
$journalistFileNames[$file] = null;
}
}
$createdJournalist = Journalist::create([
'name' => $validatedData['journalist_name'],
'email' => $validatedData['journalist_email'],
'phone_number' => $validatedData['journalist_phone_number'],
'press_card' => $validatedData['journalist_press_card'],
'press_card_doc' => $journalistFileNames['journalist_press_card_doc'],
'ukw_sertificate' => $validatedData['journalist_ukw_sertificate'],
'ukw_sertificate_doc' => $journalistFileNames['journalist_ukw_sertificate_doc'],
'media_id' => $createdMedia->id,
]);
DB::commit();
return redirect()->route('auth.register.success');
} catch (\Exception $e) {
DB::rollBack();
throw $e;
}
}
public function registerSuccess()
{
return view('auth.register-success', [
'title' => 'Daftar Berhasil',
]);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('login');
}
}