Feat: Organize videos by sector

This commit is contained in:
Xavier Oliveira
2026-06-16 12:25:58 +01:00
parent c5ed77945e
commit 84e9bf7307
21 changed files with 477 additions and 116 deletions

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreateSectorRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'name' => 'required|string|max:50|unique:sectors,name',
'slug' => 'sometimes|string|max:50|unique:sectors,slug',
];
}
public function messages(): array
{
return [
'name.required' => 'O nome do setor é obrigatório',
'name.max' => 'O nome do setor deve ter no máximo 50 caracteres',
'slug.required' => 'O slug é obrigatório',
'slug.max' => 'O slug deve ter no máximo 50 caracteres',
'slug.unique' => 'O slug já existe',
'name.unique' => 'O setor já existe',
];
}
}

View File

@@ -26,6 +26,7 @@ class CreateUserRequest extends FormRequest
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:6|confirmed',
'role_id' => 'required|exists:roles,id',
'sector_id' => 'required|exists:sectors,id',
];
}
@@ -44,6 +45,8 @@ class CreateUserRequest extends FormRequest
'password.required' => 'A password é obrigatória',
'password.min' => 'A password deve ter pelo menos 6 caracteres',
'password.confirmed' => 'As passwords não coincidem',
'sector_id.required' => 'Obrigatório selecionar um setor',
'sector_id.exists' => 'Setor não encontrado',
];
}
}

View File

@@ -39,6 +39,7 @@ class CreateVideoRequest extends FormRequest
'duration' => 'nullable|string|max:10',
'tags' => 'nullable|string|max:255', // nullable para não ser obrigatório
'category_ids' => 'nullable|array|exists:categories,id', // nullable caso não selecione
'sector_ids' => 'nullable|array|exists:sectors,id', // nullable caso não selecione
'order' => 'nullable|integer|min:0',
];
}

View File

@@ -32,6 +32,7 @@ class UpdateUserRequest extends FormRequest
Rule::unique('users', 'email')->ignore($userId),
],
'role_id' => 'sometimes|exists:roles,id',
'sector_id' => 'sometimes|exists:sectors,id',
];
}
@@ -43,6 +44,7 @@ class UpdateUserRequest extends FormRequest
'email.email' => 'O email deve ser um email válido',
'email.unique' => 'O email já está em uso',
'role_id.exists' => 'Cargo não encontrado',
'sector_id.exists' => 'Setor não encontrado',
];
}
}

View File

@@ -39,6 +39,8 @@ class UpdateVideoRequest extends FormRequest
'tags' => 'sometimes|string|max:100',
'category_ids' => 'sometimes|array',
'category_ids.*' => 'exists:categories,id',
'sector_ids' => 'sometimes|array',
'sector_ids.*' => 'exists:sectors,id',
'is_active' => 'sometimes|boolean',
'order' => 'sometimes|integer|min:0',
];