simedkom/app/Http/Controllers/AuthController.php
2025-03-05 13:45:06 +07:00

167 lines
6.6 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($validatedData)){
$request->session()->regenerate();
return redirect()->intended('/dashboard/overview');
}else{
return redirect()->back();
}
}
public function register(){
return view('auth.register', [
'title' => 'Daftar'
]);
}
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',
'company_cooperation_request_doc',
];
$companyFileNames = [];
foreach($companyFiles as $file){
$companyFileNames[$file] = store_file($validatedData[$file], '/uploads/companies', 'public')['randomFileName'];
}
$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'],
'cooperation_request' => $validatedData['company_cooperation_request'],
'cooperation_request_doc' => $companyFileNames['company_cooperation_request_doc'],
'user_id' => $createdUser->id,
]);
$mediaFiles = [
'media_journalism_organization_doc',
'media_press_council_certificate_doc'
];
$mediaFileNames = [];
foreach($mediaFiles as $file){
$mediaFileNames[$file] = store_file($validatedData[$file], '/uploads/media', 'public')['randomFileName'];
}
$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){
$journalistFileNames[$file] = store_file($validatedData[$file], '/uploads/journalists', 'public')['randomFileName'];
}
$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');
}
}