First Commit

This commit is contained in:
marco
2026-09-01 09:22:30 -03:00
commit a43ae23eb4
407 changed files with 36138 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class AiModel extends Model
{
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'provider_id',
'name',
'slug',
'max_tokens',
'temperature_support',
'is_active',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'temperature_support' => 'boolean',
'is_active' => 'boolean',
];
}
/**
* Get the AI provider that owns the model.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\AiProvider, \App\Models\AiModel>
*/
public function provider(): BelongsTo
{
return $this->belongsTo(AiProvider::class);
}
}
+53
View File
@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class AiProvider extends Model
{
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'name',
'slug',
'description',
'api_key',
'base_url',
'is_active',
'config',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'is_active' => 'boolean',
'config' => 'array',
];
}
/**
* Get all of the models for the AI provider.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany<\App\Models\AiModel>
*/
public function models(): HasMany
{
return $this->hasMany(AiModel::class, 'provider_id');
}
}
+48
View File
@@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class CookieConsent extends Model
{
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'user_id',
'session_id',
'ip_address',
'user_agent',
'consents',
'accepted_at',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'consents' => 'array',
'accepted_at' => 'datetime',
];
}
/**
* Get the user that owns the cookie consent.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, \App\Models\CookieConsent>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
+58
View File
@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class LegalDocument extends Model
{
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'type',
'title',
'content',
'version',
'published_at',
'published_by',
];
/**
* The attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'published_at' => 'datetime',
];
}
/**
* Get the user that published the document.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, \App\Models\LegalDocument>
*/
public function publishedBy(): BelongsTo
{
return $this->belongsTo(User::class, 'published_by');
}
/**
* Get the user document acceptances for the legal document.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany<\App\Models\UserDocumentAcceptance, \App\Models\LegalDocument>
*/
public function acceptances(): HasMany
{
return $this->hasMany(UserDocumentAcceptance::class);
}
}
+87
View File
@@ -0,0 +1,87 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class PromptGeneration extends Model
{
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'project_id',
'user_id',
'provider_id',
'model_id',
'generated_prompt',
'input_data',
'output_data',
'tokens_used',
'generation_time',
'status',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'input_data' => 'array',
'output_data' => 'array',
'tokens_used' => 'integer',
'generation_time' => 'decimal:3',
];
}
/**
* Get the prompt project that owns the generation.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\PromptProject, \App\Models\PromptGeneration>
*/
public function project(): BelongsTo
{
return $this->belongsTo(PromptProject::class);
}
/**
* Get the user that owns the generation.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, \App\Models\PromptGeneration>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* Get the AI provider for the generation.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\AiProvider, \App\Models\PromptGeneration>
*/
public function provider(): BelongsTo
{
return $this->belongsTo(AiProvider::class);
}
/**
* Get the AI model for the generation.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\AiModel, \App\Models\PromptGeneration>
*/
public function model(): BelongsTo
{
return $this->belongsTo(AiModel::class);
}
}
+100
View File
@@ -0,0 +1,100 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
class PromptProject extends Model
{
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'user_id',
'title',
'company_name',
'company_address',
'company_whatsapp',
'company_website',
'company_social_media',
'company_business_activities',
'company_services_products',
'objective',
'context',
'persona',
'tone',
'constraints',
'output_format',
'examples',
'variables',
'temperature',
'max_tokens',
'provider_id',
'model_id',
'generated_prompt',
'status',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'examples' => 'array',
'variables' => 'array',
'temperature' => 'decimal:2',
];
}
/**
* Get the user that owns the prompt project.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, \App\Models\PromptProject>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* Get the AI provider for the prompt project.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\AiProvider, \App\Models\PromptProject>
*/
public function provider(): BelongsTo
{
return $this->belongsTo(AiProvider::class);
}
/**
* Get the AI model for the prompt project.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\AiModel, \App\Models\PromptProject>
*/
public function model(): BelongsTo
{
return $this->belongsTo(AiModel::class);
}
/**
* Get all of the generations for the prompt project.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany<\App\Models\PromptGeneration>
*/
public function generations(): HasMany
{
return $this->hasMany(PromptGeneration::class);
}
}
+51
View File
@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class PromptTemplate extends Model
{
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'name',
'description',
'category',
'template_data',
'is_public',
'user_id',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'is_public' => 'boolean',
'template_data' => 'array',
];
}
/**
* Get the user that owns the prompt template.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, \App\Models\PromptTemplate>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class TutorialLesson extends Model
{
protected $fillable = [
'title',
'content',
'example_bad',
'example_good',
'order',
];
protected function casts(): array
{
return [
'order' => 'integer',
];
}
public function questions(): HasMany
{
return $this->hasMany(TutorialQuestion::class);
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class TutorialQuestion extends Model
{
protected $fillable = [
'question',
'options',
'correct_answer',
'explanation',
'order',
];
protected function casts(): array
{
return [
'options' => 'array',
'order' => 'integer',
];
}
public function lesson(): BelongsTo
{
return $this->belongsTo(TutorialLesson::class);
}
}
+38
View File
@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class TutorialUserProgress extends Model
{
protected $fillable = [
'user_id',
'completed_lessons',
'quiz_answers',
'quiz_score',
'quiz_passed',
'quiz_completed_at',
'certificate_generated_at',
];
protected function casts(): array
{
return [
'completed_lessons' => 'array',
'quiz_answers' => 'array',
'quiz_score' => 'integer',
'quiz_passed' => 'boolean',
'quiz_completed_at' => 'datetime',
'certificate_generated_at' => 'datetime',
];
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
+56
View File
@@ -0,0 +1,56 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
#[Fillable(['name', 'email', 'password', 'role', 'is_approved', 'avatar'])]
#[Hidden(['password', 'remember_token'])]
class User extends Authenticatable
{
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable;
/**
* The attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'is_approved' => 'boolean',
'role' => 'string',
];
}
/**
* Get all of the prompt projects for the user.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany<\App\Models\PromptProject>
*/
public function projects(): HasMany
{
return $this->hasMany(PromptProject::class);
}
/**
* Get all of the prompt generations for the user.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany<\App\Models\PromptGeneration>
*/
public function generations(): HasMany
{
return $this->hasMany(PromptGeneration::class);
}
}
+57
View File
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class UserDocumentAcceptance extends Model
{
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'user_id',
'legal_document_id',
'document_version',
'ip_address',
'user_agent',
'accepted_at',
];
/**
* The attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'accepted_at' => 'datetime',
];
}
/**
* Get the user that accepted the document.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\User, \App\Models\UserDocumentAcceptance>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* Get the legal document that was accepted.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<\App\Models\LegalDocument, \App\Models\UserDocumentAcceptance>
*/
public function document(): BelongsTo
{
return $this->belongsTo(LegalDocument::class, 'legal_document_id');
}
}