diff --git a/app/Filament/Resources/Documents/DocumentResource.php b/app/Filament/Resources/Documents/DocumentResource.php index 89dea7f..91ef010 100644 --- a/app/Filament/Resources/Documents/DocumentResource.php +++ b/app/Filament/Resources/Documents/DocumentResource.php @@ -24,7 +24,7 @@ class DocumentResource extends Resource protected static ?int $navigationSort = 4; - public static function getNavigationIcon(): string | BackedEnum | Htmlable | null + public static function getNavigationIcon(): string|BackedEnum|Htmlable|null { return 'heroicon-o-document-text'; } diff --git a/app/Filament/Resources/Documents/Tables/DocumentsTable.php b/app/Filament/Resources/Documents/Tables/DocumentsTable.php index c1435fb..501fd15 100644 --- a/app/Filament/Resources/Documents/Tables/DocumentsTable.php +++ b/app/Filament/Resources/Documents/Tables/DocumentsTable.php @@ -22,7 +22,7 @@ class DocumentsTable ->searchable(), TextColumn::make('file') ->searchable(), - + TextColumn::make('created_at') ->dateTime() ->sortable() diff --git a/app/Filament/Resources/Groups/GroupResource.php b/app/Filament/Resources/Groups/GroupResource.php index 2023d95..303e84a 100644 --- a/app/Filament/Resources/Groups/GroupResource.php +++ b/app/Filament/Resources/Groups/GroupResource.php @@ -6,6 +6,7 @@ use App\Filament\Resources\Groups\Pages\CreateGroup; use App\Filament\Resources\Groups\Pages\EditGroup; use App\Filament\Resources\Groups\Pages\ListGroups; use App\Filament\Resources\Groups\RelationManagers\PilgrimsRelationManager; +use App\Filament\Resources\Groups\RelationManagers\ProgramRelationManager; use App\Filament\Resources\Groups\Schemas\GroupForm; use App\Filament\Resources\Groups\Tables\GroupsTable; use App\Models\Group; @@ -26,7 +27,7 @@ class GroupResource extends Resource protected static ?int $navigationSort = 1; - protected static string | BackedEnum | null $navigationIcon = 'icon-flight-takeoff'; + protected static string|BackedEnum|null $navigationIcon = 'icon-flight-takeoff'; public static function form(Schema $schema): Schema { @@ -42,6 +43,7 @@ class GroupResource extends Resource { return [ PilgrimsRelationManager::class, + ProgramRelationManager::class, ]; } diff --git a/app/Filament/Resources/Groups/RelationManagers/ProgramRelationManager.php b/app/Filament/Resources/Groups/RelationManagers/ProgramRelationManager.php new file mode 100644 index 0000000..a74affd --- /dev/null +++ b/app/Filament/Resources/Groups/RelationManagers/ProgramRelationManager.php @@ -0,0 +1,60 @@ +components([ + TextInput::make('title') + ->required() + ->maxLength(255), + ]); + } + + public function table(Table $table): Table + { + return $table + ->recordTitleAttribute('title') + ->columns([ + TextColumn::make('title') + ->searchable(), + ]) + ->filters([ + // + ]) + ->headerActions([ + CreateAction::make(), + AssociateAction::make(), + ]) + ->recordActions([ + EditAction::make(), + DissociateAction::make(), + DeleteAction::make(), + ]) + ->toolbarActions([ + BulkActionGroup::make([ + DissociateBulkAction::make(), + DeleteBulkAction::make(), + ]), + ]); + } +} diff --git a/app/Filament/Resources/Groups/Schemas/GroupForm.php b/app/Filament/Resources/Groups/Schemas/GroupForm.php index dd0ba4a..b7f6ae3 100644 --- a/app/Filament/Resources/Groups/Schemas/GroupForm.php +++ b/app/Filament/Resources/Groups/Schemas/GroupForm.php @@ -17,12 +17,15 @@ class GroupForm ->components([ DatePicker::make('start_date') ->label('Başlanýan senesi') + ->native(false) ->required() ->live() - ->afterStateUpdated(fn(Set $set, ?string $state) => $set('end_date', $state ? Carbon::parse($state)->addDays(14)->format('Y-m-d') : null)), + ->afterStateUpdated(fn (Set $set, ?string $state) => $set('end_date', $state ? Carbon::parse($state)->addDays(14)->format('Y-m-d') : null)) + ->rules('unique:groups,start_date'), DatePicker::make('end_date') ->label('Gutarýan senesi') + ->native(false) ->required(), Select::make('leader_teacher_id') diff --git a/app/Filament/Resources/Groups/Tables/GroupsTable.php b/app/Filament/Resources/Groups/Tables/GroupsTable.php index 4d3acef..df95a99 100644 --- a/app/Filament/Resources/Groups/Tables/GroupsTable.php +++ b/app/Filament/Resources/Groups/Tables/GroupsTable.php @@ -3,6 +3,7 @@ namespace App\Filament\Resources\Groups\Tables; use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Tables\Columns\TextColumn; @@ -33,7 +34,7 @@ class GroupsTable ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), - + TextColumn::make('updated_at') ->dateTime() ->sortable() @@ -43,7 +44,11 @@ class GroupsTable // ]) ->recordActions([ - EditAction::make(), + EditAction::make() + ->iconButton(), + + DeleteAction::make() + ->iconButton(), ]) ->toolbarActions([ BulkActionGroup::make([ diff --git a/app/Filament/Resources/Hotels/HotelResource.php b/app/Filament/Resources/Hotels/HotelResource.php index cb71a6d..db8cc7c 100644 --- a/app/Filament/Resources/Hotels/HotelResource.php +++ b/app/Filament/Resources/Hotels/HotelResource.php @@ -5,6 +5,7 @@ namespace App\Filament\Resources\Hotels; use App\Filament\Resources\Hotels\Pages\CreateHotel; use App\Filament\Resources\Hotels\Pages\EditHotel; use App\Filament\Resources\Hotels\Pages\ListHotels; +use App\Filament\Resources\Hotels\Pages\ViewHotel; use App\Filament\Resources\Hotels\RelationManagers\RoomsRelationManager; use App\Filament\Resources\Hotels\Schemas\HotelForm; use App\Filament\Resources\Hotels\Tables\HotelsTable; @@ -12,7 +13,6 @@ use App\Models\Hotel; use BackedEnum; use Filament\Resources\Resource; use Filament\Schemas\Schema; -use Filament\Support\Icons\Heroicon; use Filament\Tables\Table; class HotelResource extends Resource @@ -22,13 +22,14 @@ class HotelResource extends Resource protected static ?string $navigationLabel = 'Otellar'; protected static ?string $pluralLabel = 'Otellar'; + protected static ?string $modelLabel = 'Otel'; protected static ?string $recordTitleAttribute = 'name'; protected static ?int $navigationSort = 5; - protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-building-office'; + protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-building-office'; public static function form(Schema $schema): Schema { @@ -37,7 +38,9 @@ class HotelResource extends Resource public static function table(Table $table): Table { - return $table->columns(HotelsTable::schema()); + return $table + ->columns(HotelsTable::schema()) + ->actions(HotelsTable::actions()); } public static function getRelations(): array @@ -52,6 +55,7 @@ class HotelResource extends Resource return [ 'index' => ListHotels::route('/'), 'create' => CreateHotel::route('/create'), + 'view' => ViewHotel::route('/{record}'), 'edit' => EditHotel::route('/{record}/edit'), ]; } diff --git a/app/Filament/Resources/Hotels/Pages/ViewHotel.php b/app/Filament/Resources/Hotels/Pages/ViewHotel.php new file mode 100644 index 0000000..bee1154 --- /dev/null +++ b/app/Filament/Resources/Hotels/Pages/ViewHotel.php @@ -0,0 +1,26 @@ +required(), - + Forms\Components\Select::make('city') ->options([ 'Makkah' => 'Makkah', diff --git a/app/Filament/Resources/Hotels/Schemas/HotelInfolist.php b/app/Filament/Resources/Hotels/Schemas/HotelInfolist.php new file mode 100644 index 0000000..b6556ab --- /dev/null +++ b/app/Filament/Resources/Hotels/Schemas/HotelInfolist.php @@ -0,0 +1,24 @@ +components([ + Infolists\Components\TextEntry::make('name'), + Infolists\Components\TextEntry::make('city'), + Infolists\Components\ImageEntry::make('image') + ->columnSpanFull(), + Infolists\Components\ImageEntry::make('images') + ->columnSpanFull(), + Infolists\Components\TextEntry::make('geo_location'), + Infolists\Components\TextEntry::make('haram_distance'), + Infolists\Components\TextEntry::make('star'), + ]); + } +} diff --git a/app/Filament/Resources/Hotels/Tables/HotelsTable.php b/app/Filament/Resources/Hotels/Tables/HotelsTable.php index 940865a..9bf978f 100644 --- a/app/Filament/Resources/Hotels/Tables/HotelsTable.php +++ b/app/Filament/Resources/Hotels/Tables/HotelsTable.php @@ -2,6 +2,8 @@ namespace App\Filament\Resources\Hotels\Tables; +use Filament\Actions\EditAction; +use Filament\Actions\ViewAction; use Filament\Tables; class HotelsTable @@ -35,4 +37,12 @@ class HotelsTable ->toggleable(isToggledHiddenByDefault: true), ]; } + + public static function actions(): array + { + return [ + ViewAction::make(), + EditAction::make(), + ]; + } } diff --git a/app/Filament/Resources/Pilgrims/PilgrimResource.php b/app/Filament/Resources/Pilgrims/PilgrimResource.php index 4d6483a..9bb37b0 100644 --- a/app/Filament/Resources/Pilgrims/PilgrimResource.php +++ b/app/Filament/Resources/Pilgrims/PilgrimResource.php @@ -12,8 +12,6 @@ use App\Models\Pilgrim; use BackedEnum; use Filament\Resources\Resource; use Filament\Schemas\Schema; -use Filament\Support\Icons\Heroicon; -use Illuminate\Contracts\Support\Htmlable; use Filament\Tables\Table; class PilgrimResource extends Resource @@ -21,10 +19,13 @@ class PilgrimResource extends Resource protected static ?string $model = Pilgrim::class; protected static ?int $navigationSort = 2; + protected static ?string $navigationLabel = 'Zyýaratçylar'; - protected static string | BackedEnum | null $navigationIcon = 'icon-pilgrim-man'; - + + protected static string|BackedEnum|null $navigationIcon = 'icon-pilgrim-man'; + protected static ?string $modelLabel = 'Zyýaratçy'; + protected static ?string $pluralLabel = 'Zyýaratçylar'; public static function form(Schema $schema): Schema diff --git a/app/Filament/Resources/Pilgrims/Tables/PilgrimsTable.php b/app/Filament/Resources/Pilgrims/Tables/PilgrimsTable.php index b2bc2ab..825d4f0 100644 --- a/app/Filament/Resources/Pilgrims/Tables/PilgrimsTable.php +++ b/app/Filament/Resources/Pilgrims/Tables/PilgrimsTable.php @@ -30,7 +30,7 @@ class PilgrimsTable TextColumn::make('international_passport') ->searchable(), - + TextColumn::make('created_at') ->dateTime() ->sortable() diff --git a/app/Filament/Resources/Programs/Pages/CreateProgram.php b/app/Filament/Resources/Programs/Pages/CreateProgram.php new file mode 100644 index 0000000..3af2b1d --- /dev/null +++ b/app/Filament/Resources/Programs/Pages/CreateProgram.php @@ -0,0 +1,11 @@ + Pages\ListPrograms::route('/'), + 'create' => Pages\CreateProgram::route('/create'), + 'edit' => Pages\EditProgram::route('/{record}/edit'), + 'view' => Pages\ViewProgram::route('/{record}'), + ]; + } +} diff --git a/app/Filament/Resources/Programs/Schemas/ProgramForm.php b/app/Filament/Resources/Programs/Schemas/ProgramForm.php new file mode 100644 index 0000000..9b13f17 --- /dev/null +++ b/app/Filament/Resources/Programs/Schemas/ProgramForm.php @@ -0,0 +1,51 @@ +components([ + Select::make('group_id') + ->relationship('group', 'name') + ->label('Topar') + ->required(), + Repeater::make('days') + ->label('Günler') + ->itemLabel(fn (array $state): ?string => ($state['day_number'] ?? '').'-nji gün') + ->schema([ + TextInput::make('day_number') + ->numeric() + ->required() + ->label('Günüň belgisi'), + Repeater::make('actions') + ->label('Actionlar') + ->schema([ + TextInput::make('title') + ->label('Ady') + ->required() + ->maxLength(255), + Textarea::make('description') + ->label('Düşündirişi') + ->columnSpanFull(), + TimePicker::make('time') + ->label('Wagty'), + TextInput::make('icon') + ->label('Ikony') + ->required() + ->maxLength(255), + ]) + ->columns(2), + ])->columnSpanFull(), + ]); + } +} diff --git a/app/Filament/Resources/Programs/Schemas/ProgramInfolist.php b/app/Filament/Resources/Programs/Schemas/ProgramInfolist.php new file mode 100644 index 0000000..396aa61 --- /dev/null +++ b/app/Filament/Resources/Programs/Schemas/ProgramInfolist.php @@ -0,0 +1,21 @@ +components([ + TextEntry::make('group.id'), + TextEntry::make('created_at') + ->dateTime(), + TextEntry::make('updated_at') + ->dateTime(), + ]); + } +} diff --git a/app/Filament/Resources/Programs/Tables/ProgramsTable.php b/app/Filament/Resources/Programs/Tables/ProgramsTable.php new file mode 100644 index 0000000..d08cb43 --- /dev/null +++ b/app/Filament/Resources/Programs/Tables/ProgramsTable.php @@ -0,0 +1,47 @@ +columns([ + TextColumn::make('group.name') + ->label('Topar') + ->searchable() + ->sortable(), + TextColumn::make('days') + ->label('Gün sany') + ->getStateUsing(fn ($record) => count($record->days).' gün') + ->sortable(), + TextColumn::make('created_at') + ->label('Döredilen wagty') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('updated_at') + ->label('Üýtgedilen wagty') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + ->actions([ + ViewAction::make(), + EditAction::make(), + ]) + ->bulkActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), + ]); + } +} diff --git a/app/Filament/Resources/Rooms/RoomResource.php b/app/Filament/Resources/Rooms/RoomResource.php index bb8cca9..317e58f 100644 --- a/app/Filament/Resources/Rooms/RoomResource.php +++ b/app/Filament/Resources/Rooms/RoomResource.php @@ -11,7 +11,6 @@ use App\Models\Room; use BackedEnum; use Filament\Resources\Resource; use Filament\Schemas\Schema; -use Filament\Support\Icons\Heroicon; use Filament\Tables\Table; class RoomResource extends Resource @@ -21,13 +20,14 @@ class RoomResource extends Resource protected static ?string $navigationLabel = 'Otaglar'; protected static ?string $pluralLabel = 'Otaglar'; + protected static ?string $modelLabel = 'Otag'; protected static ?string $recordTitleAttribute = 'name'; protected static ?int $navigationSort = 6; - protected static string | BackedEnum | null $navigationIcon = 'icon-door-open'; + protected static string|BackedEnum|null $navigationIcon = 'icon-door-open'; public static function form(Schema $schema): Schema { @@ -36,7 +36,8 @@ class RoomResource extends Resource public static function table(Table $table): Table { - return $table->columns(RoomsTable::schema()); + return $table + ->columns(RoomsTable::schema()); } public static function getRelations(): array diff --git a/app/Filament/Resources/Rooms/Schemas/RoomForm.php b/app/Filament/Resources/Rooms/Schemas/RoomForm.php index 2eef849..cb4ba18 100644 --- a/app/Filament/Resources/Rooms/Schemas/RoomForm.php +++ b/app/Filament/Resources/Rooms/Schemas/RoomForm.php @@ -27,7 +27,7 @@ class RoomForm ->required() ->numeric() ->default(1), - + Forms\Components\Checkbox::make('wide') ->default(false) ->required(), diff --git a/app/Filament/Resources/Rooms/Tables/RoomsTable.php b/app/Filament/Resources/Rooms/Tables/RoomsTable.php index 8010ec4..b9a43d6 100644 --- a/app/Filament/Resources/Rooms/Tables/RoomsTable.php +++ b/app/Filament/Resources/Rooms/Tables/RoomsTable.php @@ -9,17 +9,22 @@ class RoomsTable public static function schema(): array { return [ - Tables\Columns\TextColumn::make('hotel.name') - ->sortable(), Tables\Columns\TextColumn::make('name') ->searchable(), + + Tables\Columns\TextColumn::make('hotel.name') + ->sortable(), + Tables\Columns\TextColumn::make('floor') ->searchable(), + Tables\Columns\TextColumn::make('bed_count') ->numeric() ->sortable(), + Tables\Columns\IconColumn::make('wide') ->boolean(), + Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() diff --git a/app/Filament/Resources/Teachers/TeacherResource.php b/app/Filament/Resources/Teachers/TeacherResource.php index f3db799..b1f681d 100644 --- a/app/Filament/Resources/Teachers/TeacherResource.php +++ b/app/Filament/Resources/Teachers/TeacherResource.php @@ -11,8 +11,8 @@ use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction as ActionsEditAction; use Filament\Forms; -use Filament\Schemas\Schema; use Filament\Resources\Resource; +use Filament\Schemas\Schema; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Contracts\Support\Htmlable; @@ -29,7 +29,7 @@ class TeacherResource extends Resource protected static ?int $navigationSort = 3; - public static function getNavigationIcon(): string | BackedEnum | Htmlable | null + public static function getNavigationIcon(): string|BackedEnum|Htmlable|null { return 'heroicon-o-user-group'; } diff --git a/app/Http/Controllers/CurrencyRatesController.php b/app/Http/Controllers/CurrencyRatesController.php new file mode 100644 index 0000000..42b0615 --- /dev/null +++ b/app/Http/Controllers/CurrencyRatesController.php @@ -0,0 +1,22 @@ +json([ + 'USD_TO_SAR' => '3.70', + 'USD_TO_TMT' => '19.5', + ]); + } +} diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php new file mode 100644 index 0000000..4cbd960 --- /dev/null +++ b/app/Http/Controllers/TestController.php @@ -0,0 +1,11 @@ + */ protected $casts = [ @@ -28,23 +34,17 @@ class Group extends Model 'end_date' => 'date', ]; - /** + /** * Get the name of the group - * - * @return Attribute - * */ + * + * */ public function name(): Attribute { return Attribute::make( - get: fn ($value) => $this->start_date->format('d M') . ' - ' . $this->end_date->format('d M'), + get: fn ($value) => $this->start_date->format('d M').' - '.$this->end_date->format('d M'), ); } - public function pilgrims(): HasMany - { - return $this->hasMany(Pilgrim::class); - } - public function leaderTeacher(): BelongsTo { return $this->belongsTo(Teacher::class, 'leader_teacher_id'); @@ -54,4 +54,19 @@ class Group extends Model { return $this->belongsToMany(Teacher::class, 'group_teacher'); } + + public function teachers(): BelongsToMany + { + return $this->belongsToMany(Teacher::class, 'group_teacher'); + } + + public function pilgrims(): HasMany + { + return $this->hasMany(Pilgrim::class, 'group_id'); + } + + public function program(): HasOne + { + return $this->hasOne(Program::class); + } } diff --git a/app/Models/Hotel.php b/app/Models/Hotel.php index 203bc0c..8111def 100644 --- a/app/Models/Hotel.php +++ b/app/Models/Hotel.php @@ -9,12 +9,12 @@ use Illuminate\Database\Eloquent\Relations\HasMany; class Hotel extends Model { use HasFactory; - + /** * @return array */ protected function casts(): array - { + { return [ 'images' => 'array', ]; diff --git a/app/Models/Pilgrim.php b/app/Models/Pilgrim.php index 26f1cc1..dcdf822 100644 --- a/app/Models/Pilgrim.php +++ b/app/Models/Pilgrim.php @@ -23,6 +23,16 @@ class Pilgrim extends Model { use HasFactory; + protected $fillable = [ + 'group_id', + 'first_name', + 'last_name', + 'birthdate', + 'image', + 'local_passport', + 'international_passport', + ]; + protected $casts = [ 'birthdate' => 'date', ]; diff --git a/app/Models/Program.php b/app/Models/Program.php new file mode 100644 index 0000000..64cb199 --- /dev/null +++ b/app/Models/Program.php @@ -0,0 +1,30 @@ + */ + use HasFactory; + + protected $fillable = [ + 'group_id', + 'days', + ]; + + protected function casts(): array + { + return [ + 'days' => 'array', + ]; + } + + public function group(): BelongsTo + { + return $this->belongsTo(Group::class); + } +} diff --git a/app/Providers/Filament/PanelPanelProvider.php b/app/Providers/Filament/PanelPanelProvider.php index 307d832..e317fc4 100644 --- a/app/Providers/Filament/PanelPanelProvider.php +++ b/app/Providers/Filament/PanelPanelProvider.php @@ -11,7 +11,6 @@ use Filament\Panel; use Filament\PanelProvider; use Filament\Support\Colors\Color; use Filament\Widgets\AccountWidget; -use Filament\Widgets\FilamentInfoWidget; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; diff --git a/bootstrap/app.php b/bootstrap/app.php index c183276..c3928c5 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -7,6 +7,7 @@ use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) diff --git a/config/blade-icons.php b/config/blade-icons.php index 8430486..db03672 100644 --- a/config/blade-icons.php +++ b/config/blade-icons.php @@ -16,7 +16,7 @@ return [ 'sets' => [ 'default' => [ - + /* |----------------------------------------------------------------- | Icons Path @@ -29,9 +29,9 @@ return [ | Relative to the disk root when the disk option is set. | */ - + 'path' => 'resources/svg', - + /* |----------------------------------------------------------------- | Filesystem Disk @@ -42,9 +42,9 @@ return [ | starts relatively from the disk root. | */ - + 'disk' => '', - + /* |----------------------------------------------------------------- | Default Prefix @@ -55,9 +55,9 @@ return [ | to every icon name. It's required and needs to be unique. | */ - + 'prefix' => 'icon', - + /* |----------------------------------------------------------------- | Fallback Icon @@ -67,9 +67,9 @@ return [ | icon when an icon in this set cannot be found. | */ - + 'fallback' => '', - + /* |----------------------------------------------------------------- | Default Set Classes @@ -79,9 +79,9 @@ return [ | will be applied by default to all icons within this set. | */ - + 'class' => '', - + /* |----------------------------------------------------------------- | Default Set Attributes @@ -91,12 +91,12 @@ return [ | will be applied by default to all icons within this set. | */ - + 'attributes' => [ // 'width' => 50, // 'height' => 50, ], - + ], ], diff --git a/database/factories/GroupFactory.php b/database/factories/GroupFactory.php new file mode 100644 index 0000000..06800c1 --- /dev/null +++ b/database/factories/GroupFactory.php @@ -0,0 +1,24 @@ + + */ +class GroupFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'start_date' => $this->faker->dateTimeBetween('+1 week', '+2 week'), + 'end_date' => $this->faker->dateTimeBetween('+3 week', '+4 week'), + ]; + } +} diff --git a/database/factories/ProgramFactory.php b/database/factories/ProgramFactory.php new file mode 100644 index 0000000..1d4b736 --- /dev/null +++ b/database/factories/ProgramFactory.php @@ -0,0 +1,54 @@ + + */ +class ProgramFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'group_id' => Group::factory(), + 'days' => [ + [ + 'day_number' => 1, + 'actions' => [ + [ + 'title' => 'Mekkä şäherine ugramak', + 'description' => $this->faker->paragraph, + 'time' => '09:00', + 'icon' => 'heroicon-o-paper-airplane', + ], + [ + 'title' => 'Mekgedäki myhmanhana ýerleşmek', + 'description' => $this->faker->paragraph, + 'time' => '14:00', + 'icon' => 'heroicon-o-building-office-2', + ], + ], + ], + [ + 'day_number' => 2, + 'actions' => [ + [ + 'title' => 'Umra ybadaty', + 'description' => $this->faker->paragraph, + 'time' => '09:00', + 'icon' => 'heroicon-o-moon', + ], + ], + ], + ], + ]; + } +} diff --git a/database/migrations/2025_09_02_195635_create_programs_table.php b/database/migrations/2025_09_02_195635_create_programs_table.php new file mode 100644 index 0000000..2db202e --- /dev/null +++ b/database/migrations/2025_09_02_195635_create_programs_table.php @@ -0,0 +1,29 @@ +id(); + $table->foreignId('group_id')->constrained()->cascadeOnDelete(); + $table->json('days'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('programs'); + } +}; diff --git a/database/seeders/TeacherTableSeeder.php b/database/seeders/TeacherTableSeeder.php index 51b7844..16e7950 100644 --- a/database/seeders/TeacherTableSeeder.php +++ b/database/seeders/TeacherTableSeeder.php @@ -2,9 +2,8 @@ namespace Database\Seeders; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; -use Illuminate\Database\Seeder; use App\Models\Teacher; +use Illuminate\Database\Seeder; class TeacherTableSeeder extends Seeder { diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..76af12c --- /dev/null +++ b/routes/api.php @@ -0,0 +1,11 @@ +group(function () { + Route::get('currency-rates', [CurrencyRatesController::class, 'index']); +});