Creation de l'api baslac.ch

beta
Ambigapathy Vinayak ago%!(EXTRA string=7 months)
parent 7d1d66f271
commit 9a3f2bd563
  1. 18
      .editorconfig
  2. 1
      .gitignore
  3. 47
      app/Http/Controllers/AlbumController.php
  4. 47
      app/Http/Controllers/ArticleController.php
  5. 10
      app/Http/Controllers/AuthController.php
  6. 45
      app/Http/Controllers/CategorieController.php
  7. 31
      app/Http/Controllers/ImageController.php
  8. 47
      app/Http/Controllers/InfoController.php
  9. 47
      app/Http/Controllers/UserController.php
  10. 30
      app/Models/Album.php
  11. 36
      app/Models/Article.php
  12. 22
      app/Models/Categorie.php
  13. 17
      app/Models/Image.php
  14. 30
      app/Models/Info.php
  15. 18
      app/Models/User.php
  16. 26
      app/View/Components/layout.php
  17. 1
      bootstrap/app.php
  18. 1
      composer.json
  19. 560
      composer.lock
  20. 1
      config/auth.php
  21. 3
      config/filesystems.php
  22. 83
      config/sanctum.php
  23. 21
      database/migrations/0001_01_01_000000_create_users_table.php
  24. 33
      database/migrations/2024_09_22_160223_create_personal_access_tokens_table.php
  25. 35
      database/migrations/2024_09_24_073400_create_albums_table.php
  26. 33
      database/migrations/2024_09_24_073499_create_images_table.php
  27. 34
      database/migrations/2024_09_24_073508_create_articles_table.php
  28. 33
      database/migrations/2024_09_24_073599_create_categories_table.php
  29. 33
      database/migrations/2024_09_24_073616_create_infos_table.php
  30. 29
      database/migrations/2024_09_24_090618_create_images_articles_table.php
  31. 24
      database/seeders/AlbumsSeeder.php
  32. 17
      database/seeders/ArticlesSeeder.php
  33. 22
      database/seeders/CategoriesSeeder.php
  34. 17
      database/seeders/InfosSeeder.php
  35. 28
      database/seeders/UsersSeeder.php
  36. 2572
      package-lock.json
  37. 5
      package.json
  38. 6
      postcss.config.js
  39. BIN
      public/favicon.ico
  40. 4
      public/img/article_icon.svg
  41. 2
      public/img/contact_icon.svg
  42. 13
      public/img/info_icon.svg
  43. 0
      public/static-img/baslac.svg
  44. 54
      requirements.md
  45. 7
      resources/css/app.css
  46. 21
      resources/views/components/layout.blade.php
  47. 176
      resources/views/home.blade.php
  48. 4
      resources/views/prefab/item-list.blade.php
  49. 25
      resources/views/prefab/menu-list.blade.php
  50. 8
      routes/api.php
  51. 44
      routes/web.php
  52. 1
      storage/app/.gitignore
  53. 2
      storage/app/private/.gitignore
  54. 18
      tailwind.config.js
  55. 8
      todo.md

@ -0,0 +1,18 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
[docker-compose.yml]
indent_size = 4

1
.gitignore vendored

@ -18,3 +18,4 @@ yarn-error.log
/.fleet
/.idea
/.vscode
/.zed

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Album;
use Illuminate\Support\Facades\Validator;
class AlbumController extends Controller
{
public function index(Request $request)
{
$albums = Album::paginate(15);
if (count($albums) > $request->page) return response($albums[$request->page]);
return response(["message" => "Page not found"], 404);
}
public function show(Request $request)
{
$album = Album::find($request->id);
if ($album) return response($album);
return response(["message" => "Album not found"], 404);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), ["name" => "required"]);
if ($validator->fails()) return response($validator->messages(), 400);
response(Album::create($request->all()));
}
public function update(Request $request)
{
$album = Album::find($request->id);
if (!$album) return response(["message" => "Album not found"], 404);
$album->update($request->all());
return response($album);
}
public function destroy(Request $request)
{
$album = Album::find($request->id);
if (!$album) return response(["message" => "Album not found"], 404);
$album->destroy();
return response([]);
}
}

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Article;
use Illuminate\Support\Facades\Validator;
class ArticleController extends Controller
{
public function index(Request $request)
{
$articles = Article::paginate(15);
if (count($articles) > $request->page) return response($articles[$request->page]);
return response(["message" => "Page not found"], 404);
}
public function show(Request $request)
{
$article = Article::find($request->id);
if ($article) return response($article);
return response(["message" => "Article not found"], 404);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), ["name" => "required"]);
if ($validator->fails()) return response($validator->messages(), 400);
response(Article::create($request->all()));
}
public function update(Request $request)
{
$article = Article::find($request->id);
if (!$article) return response(["message" => "Article not found"], 404);
$article->update($request->all());
return response($article);
}
public function destroy(Request $request)
{
$article = Article::find($request->id);
if (!$article) return response(["message" => "Article not found"], 404);
$article->destroy();
return response([]);
}
}

@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AuthController extends Controller
{
//
}

@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Categorie;
use Illuminate\Support\Facades\Validator;
class CategorieController extends Controller
{
public function index(Request $request)
{
return response(Categorie::all());
}
public function show(Request $request)
{
$categorie = Categorie::find($request->id);
if ($categorie) return response($categorie);
return response(["message" => "Categorie not found"], 404);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), ["name" => "required"]);
if ($validator->fails()) return response($validator->messages(), 400);
response(Categorie::create($request->all()));
}
public function update(Request $request)
{
$categorie = Categorie::find($request->id);
if (!$categorie) return response(["message" => "Categorie not found"], 404);
$categorie->update($request->all());
return response($categorie);
}
public function destroy(Request $request)
{
$categorie = Categorie::find($request->id);
if (!$categorie) return response(["message" => "Categorie not found"], 404);
$categorie->destroy();
return response([]);
}
}

@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Image;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
class ImageController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), ["image" => "required"]);
if ($validator->fails()) return response($validator->messages(), 400);
$path = $request->file("image")->hashName();
$request->file('image')->store("public/images");
return response(Image::create([
"url" => $path
]));
}
public function destroy(Request $request)
{
$image = Image::find($request->id);
if (!$image) return response(["message" => "Image not found"], 404);
Storage::disk('local')->delete("public/images/". $image->url);
$image->destroy();
return response([]);
}
}

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Info;
use Illuminate\Support\Facades\Validator;
class InfoController extends Controller
{
public function index(Request $request)
{
$infos = Info::paginate(15);
if (count($infos) > $request->page) return response($infos[$request->page]);
return response(["message" => "Page not found"], 404);
}
public function show(Request $request)
{
$info = Info::find($request->id);
if ($info) return response($info);
return response(["message" => "Info not found"], 404);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), ["name" => "required"]);
if ($validator->fails()) return response($validator->messages(), 400);
response(Info::create($request->all()));
}
public function update(Request $request)
{
$info = Info::find($request->id);
if (!$info) return response(["message" => "Info not found"], 404);
$info->update($request->all());
return response($info);
}
public function destroy(Request $request)
{
$info = Info::find($request->id);
if (!$info) return response(["message" => "Info not found"], 404);
$info->destroy();
return response([]);
}
}

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function index(Request $request)
{
$users = User::paginate(15);
if (count($users) > $request->page) return response($users[$request->page]);
return response(["message" => "Page not found"], 404);
}
public function show(Request $request)
{
$user = User::find($request->id);
if ($user) return response($user);
return response(["message" => "User not found"], 404);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), ["name" => "required"]);
if ($validator->fails()) return response($validator->messages(), 400);
response(User::create($request->all()));
}
public function update(Request $request)
{
$user = User::find($request->id);
if (!$user) return response(["message" => "User not found"], 404);
$user->update($request->all());
return response($user);
}
public function destroy(Request $request)
{
$user = User::find($request->id);
if (!$user) return response(["message" => "User not found"], 404);
$user->destroy();
return response([]);
}
}

@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Album extends Model
{
use HasFactory;
protected $fillable = [
"name",
"description",
"created_at",
"updated_at"
];
public function articles()
{
return $this->hasMany(Article::class);
}
public function images()
{
$images = [];
foreach($this->articles as $article) $images = array_merge($images, $article->images);
return $images;
}
}

@ -0,0 +1,36 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
use HasFactory;
protected $fillable = [
"title",
"description",
"content",
"user_id",
"album_id",
"created_at",
"updated_at"
];
public function album()
{
return $this->belongsTo(Album::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
public function images()
{
return $this->belongsToMany(Image::class, "images_articles");
}
}

@ -0,0 +1,22 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Categorie extends Model
{
use HasFactory;
protected $fillable = [
"name",
"created_at",
"updated_at"
];
public function infos()
{
return $this->hasMany(Info::class);
}
}

@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
use HasFactory;
protected $fillable = [
"url",
"created_at",
"updated_at"
];
}

@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Info extends Model
{
use HasFactory;
protected $fillable = [
"title",
"content",
"categorie_id",
"user_id",
"created_at",
"updated_at"
];
public function user()
{
return $this->belongsTo(User::class);
}
public function categorie()
{
return $this->belongsTo(Categorie::class);
}
}

@ -6,11 +6,10 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens;
use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
@ -19,8 +18,13 @@ class User extends Authenticatable
*/
protected $fillable = [
'name',
"lastname",
'email',
"phone",
"totem",
"contactable",
'password',
"image_id"
];
/**
@ -45,4 +49,14 @@ protected function casts(): array
'password' => 'hashed',
];
}
public function infos()
{
return $this->hasMany(Info::class);
}
public function articles()
{
return $this->hasMany(Article::class);
}
}

@ -1,26 +0,0 @@
<?php
namespace App\View\Components;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class layout extends Component
{
/**
* Create a new component instance.
*/
public function __construct()
{
//
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
{
return view('components.layout');
}
}

@ -7,7 +7,6 @@
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)

@ -7,7 +7,6 @@
"require": {
"php": "^8.2",
"laravel/framework": "^11.9",
"laravel/sanctum": "^4.0",
"laravel/tinker": "^2.9"
},
"require-dev": {

560
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -12,7 +12,6 @@
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => env('AUTH_GUARD', 'web'),
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),

@ -32,7 +32,8 @@
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'root' => storage_path('app/private'),
'serve' => true,
'throw' => false,
],

@ -1,83 +0,0 @@
<?php
use Laravel\Sanctum\Sanctum;
return [
/*
|--------------------------------------------------------------------------
| Stateful Domains
|--------------------------------------------------------------------------
|
| Requests from the following domains / hosts will receive stateful API
| authentication cookies. Typically, these should include your local
| and production domains which access your API via a frontend SPA.
|
*/
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
/*
|--------------------------------------------------------------------------
| Sanctum Guards
|--------------------------------------------------------------------------
|
| This array contains the authentication guards that will be checked when
| Sanctum is trying to authenticate a request. If none of these guards
| are able to authenticate the request, Sanctum will use the bearer
| token that's present on an incoming request for authentication.
|
*/
'guard' => ['web'],
/*
|--------------------------------------------------------------------------
| Expiration Minutes
|--------------------------------------------------------------------------
|
| This value controls the number of minutes until an issued token will be
| considered expired. This will override any values set in the token's
| "expires_at" attribute, but first-party sessions are not affected.
|
*/
'expiration' => null,
/*
|--------------------------------------------------------------------------
| Token Prefix
|--------------------------------------------------------------------------
|
| Sanctum can prefix new tokens in order to take advantage of numerous
| security scanning initiatives maintained by open source platforms
| that notify developers if they commit tokens into repositories.
|
| See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
|
*/
'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),
/*
|--------------------------------------------------------------------------
| Sanctum Middleware
|--------------------------------------------------------------------------
|
| When authenticating your first-party SPA with Sanctum you may need to
| customize some of the middleware Sanctum uses while processing the
| request. You may change the middleware listed below as required.
|
*/
'middleware' => [
'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
],
];

@ -1,8 +1,11 @@
<?php
use Carbon\Carbon;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
return new class extends Migration
{
@ -14,13 +17,31 @@ public function up(): void
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string("lastname");
$table->string("totem")->nullable();
$table->string('email')->unique();
$table->string("phone")->unique()->nullable();
$table->tinyInteger("contactable")->default(0);
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->unsignedBigInteger("image_id")->default(0);
$table->string("api_token", 80)->after('password')->unique()->nullable()->default(null);
$table->rememberToken();
$table->timestamps();
$table->foreign("image_id")->references("id")->on("images");
});
DB::table("users")->insert([
"name" => "Vinayak",
"lastname" => "Ambigapathy",
"totem" => "Tax",
"email" => "anulax1225@icloud.com",
"contactable" => 1,
"password" => bcrypt(env("ADMIN_PASSWORD")),
"email_verified_at" => Carbon::now(),
"api_token" => Str::random(80),
]);
Schema::create('password_reset_tokens', function (Blueprint $table) {
$table->string('email')->primary();
$table->string('token');

@ -1,33 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->morphs('tokenable');
$table->string('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamp('expires_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('personal_access_tokens');
}
};

@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('albums', function (Blueprint $table) {
$table->id();
$table->string("name", 255);
$table->string("description", 800)->nullable();
$table->timestamps();
});
DB::table("albums")->insert([
"name" => "Autres",
"description" => "Tout les articles sans album."
]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('albums');
}
};

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('images', function (Blueprint $table) {
$table->id();
$table->string("url", 255)->unique();
$table->timestamps();
});
DB::table("images")->insert([
"url" => "default-pic.svg"
]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('images');
}
};

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string("title", 255);
$table->string("description", 800);
$table->longText("content")->nullable();
$table->unsignedBigInteger("user_id");
$table->unsignedBigInteger("album_id")->default(0);
$table->timestamps();
$table->foreign("user_id")->references("id")->on("users");
$table->foreign("album_id")->references("id")->on("albums");
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('articles');
}
};

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string("name", 255)->unique();
$table->timestamps();
});
DB::table("categories")->insert([
"name" => "Autres"
]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('categories');
}
};

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('infos', function (Blueprint $table) {
$table->id();
$table->string("title", 255);
$table->longText("content");
$table->unsignedBigInteger("categorie_id");
$table->unsignedBigInteger("user_id");
$table->timestamps();
$table->foreign("categorie_id")->references("id")->on("categories");
$table->foreign("user_id")->references("id")->on("users");
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('infos');
}
};

@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('images_articles', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger("image_id");
$table->unsignedBigInteger("article_id");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('images_articles');
}
};

@ -0,0 +1,24 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Album;
class AlbumsSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$faker = \Faker\Factory::create();
for ($i = 0; $i < 10; $i++)
Album::create([
"name" => $faker->title(),
"description" => $faker->paragraph(),
]);
}
}

@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ArticlesSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

@ -0,0 +1,22 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Categorie;
class CategoriesSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$faker = \Faker\Factory::create();
for ($i = 0; $i < 8; $i++)
Categorie::create([
"name" => $faker->title(),
]);
}
}

@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class InfosSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

@ -0,0 +1,28 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
use Carbon\Carbon;
class UsersSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// $faker = \Faker\Factory::create();
// for ($i = 0; $i < 15; $i++)
// User::create([
// "name" => $faker->firstName(),
// "lastname" => $faker->lastName(),
// "totem" => $faker->company(),
// "email" => $faker->email(),
// "phone" => $faker->e164PhoneNumber(),
// "email_verified_at" => Carbon::now(),
// ]);
}
}

2572
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -6,11 +6,8 @@
"build": "vite build"
},
"devDependencies": {
"autoprefixer": "^10.4.20",
"axios": "^1.6.4",
"axios": "^1.7.4",
"laravel-vite-plugin": "^1.0",
"postcss": "^8.4.41",
"tailwindcss": "^3.4.10",
"vite": "^5.0"
}
}

@ -1,6 +0,0 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 0 B

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="#000000" stroke-width="2" d="M16,7 L19,7 L19,11 L16,11 L16,7 Z M9,15 L20,15 M9,11 L13,11 M9,7 L13,7 M6,18.5 C6,19.8807119 4.88071187,21 3.5,21 C2.11928813,21 1,19.8807119 1,18.5 L1,7 L6.02493781,7 M6,18.5 L6,3 L23,3 L23,18.5 C23,19.8807119 21.8807119,21 20.5,21 L3.5,21"/>
</svg>

Before

Width:  |  Height:  |  Size: 516 B

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" role="img" xmlns="http://www.w3.org/2000/svg" aria-labelledby="contactBookIconTitle" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none" color="#000000"> <title id="contactBookIconTitle">Contact Book</title> <path d="M8,3 L8,21"/> <path d="M20,2.99999899 L20,21 L6,21 C4.8954305,21 4,20.1045695 4,19 L4,4.99999899 C4,3.89542949 4.8954305,2.99999899 6,2.99999899 L20,2.99999899 Z"/> <path d="M8,17 C8,15 11.3333333,15.3333333 12.6666667,14 C13.3333333,13.3333333 11.3333333,13.3333333 11.3333333,10 C11.3333333,7.778 12.222,6.66666667 14,6.66666667 C15.778,6.66666667 16.6666667,7.778 16.6666667,10 C16.6666667,13.3333333 14.6666667,13.3333333 15.3333333,14 C16.6666667,15.3333333 20,15 20,17"/> </svg>

Before

Width:  |  Height:  |  Size: 915 B

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="800px" height="800px" viewBox="0 0 124 124" xml:space="preserve">
<g>
<path d="M62,0C27.8,0,0,27.8,0,62s27.8,62,62,62s62-27.8,62-62S96.2,0,62,0z M62,109c-25.9,0-47-21.1-47-47c0-25.9,21.1-47,47-47
c25.9,0,47,21.1,47,47C109,87.9,87.9,109,62,109z"/>
<path d="M72,82h-1V53c0-3.3-2.7-6-6-6h-1.5H59h-6.5c-3.3,0-6.5,2.7-6.5,6v6c0,3.3,3.2,6,6.5,6H53v29c0,3.3,2.7,6,6,6h2h4h7
c3.3,0,6-2.7,6-6v-6C78,84.7,75.3,82,72,82z"/>
<circle cx="62" cy="32.5" r="9"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 823 B

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

@ -1,54 +0,0 @@
# Baslac.ch
# Pages
* Article
* lister tout les article
* montrer un article en detail
* creer un aricle (Utilisateur)
* Page info
* montrer une page info en detail
* creer une page info (Utilisateur)
* les page info seront lister dans le menu du site par categorie
* Contact
* Lister les utilisateur qui peuvent etre contacté et montre les info de contact
# Fonctionnalité
* Un utilisateur par chef.
* Les cutilisateur sont créer uniquement pour les chef.
* Les article sont postée automatiquement sur les autre réseau.
* Affiché le programme au formats pdf.
* Possibilité pour les parents de s'inscrire a une news letter
* Afficher les informations du groupe
* Les utilisateur peuvent faire des articles.
* Les contenu des article peuvent est ecrire dans le meme style que se document.
* Les utilisateur doivent recevoir un code pour pouvoir sign in, code qui peux etre produit par n'import quel utilisateur.
* Le premiere utilisateur sera groupe@baslac.ch et sera controller par l'administrateur du site.
# Donnée
obligatoire = *
## Utilisateur
* Nom *
* Role
* Totem
* Photo de profil
* Email *
* Numero de telephone
* Contactable (Oui/Non)
* Mot de passe
## Article
* titre *
* description *
* photos *
* contenu
* date
* auteur(Utilisateur) *
## page info
* nom de la page
* contenu
## categorie
* nom de la categorie
* lien vers des pages infos

@ -1,7 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--menu-back-color:#681536ef;
}

@ -1,21 +0,0 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@if($title) <title>Scouts Baslac - {{ $title }}</title>
@else <title>Scouts Baslac</title>
@endif
@vite('resources/css/app.css')
@if($csslinks) {{ $csslinks }}
@endif
@if($jslinks) {{ $jslinks }}
@endif
</head>
<body class="w-full h-screen flex laptop:flex-row flex-col dark:bg-black dark:text-white">
@include('prefab.menu-list')
{{ $slot }}
</body>
</html>

File diff suppressed because one or more lines are too long

@ -1,4 +0,0 @@
<a href="{{ $href }}" class="flex laptop:w-1/2 my-5 mx-10">
<img class="laptop:w-[20px] dark:brightness-0 dark:invert" src="/img/{{ $icon }}.svg">
<p class="text-xl ml-2">{{ $name }}</p>
</a>

@ -1,25 +0,0 @@
<nav class="laptop:h-screen laptop:w-[200px] w-full h-[100px] laptop:border-r border-b border-black dark:border-white">
<div class="w-full flex h-full laptop:flex-col laptop:items-center">
<div class="laptop:w-4/5 py-2 mx-10">
<img class="laptop:h-[100px]" src="/img/baslac.svg">
</div>
<div class="flex laptop:w-full h-full
laptop:border-t laptop:border-gray-400 laptop:flex-col items-center">
@include("prefab.item-list", [
"name" => "Infos",
"href" => "#",
"icon" => "info_icon"
])
@include("prefab.item-list", [
"name" => "Articles",
"href" => "#",
"icon" => "article_icon"
])
@include("prefab.item-list", [
"name" => "Contact",
"href" => "#",
"icon" => "contact_icon"
])
</div>
</div>
</nav>

@ -1,8 +0,0 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');

@ -1,13 +1,45 @@
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AlbumController;
use App\Http\Controllers\ArticleController;
use App\Http\Controllers\CategorieController;
use App\Http\Controllers\ImageController;
use App\Http\Controllers\InfoController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\AuthController;
Route::get('/', function () {
return view('home');
});
Route::get('/', function () { return view('home'); });
Route::get('/home', function () {
return redirect('/');
});
Route::get("/albums", [AlbumController::class, "index"]);
Route::get("/albums/{id}", [AlbumController::class, "show"]);
Route::post("/albums", [AlbumController::class, "store"]);
Route::put("/albums/{id}", [AlbumController::class, "update"]);
Route::delete("/albums/{id}", [AlbumController::class, "destroy"]);
Route::get("/article", [ArticleController::class, "index"]);
Route::get("/article/{id}", [ArticleController::class, "show"]);
Route::post("/article", [ArticleController::class, "store"]);
Route::put("/article/{id}", [ArticleController::class, "update"]);
Route::delete("/article/{id}", [ArticleController::class, "destroy"]);
Route::get("/categories", [CategorieController::class, "index"]);
Route::get("/categories/{id}", [CategorieController::class, "show"]);
Route::post("/categories", [CategorieController::class, "store"]);
Route::put("/categories/{id}", [CategorieController::class, "update"]);
Route::delete("/categories/{id}", [CategorieController::class, "destroy"]);
Route::get("/users", [UserController::class, "index"]);
Route::get("/users/{id}", [UserController::class, "show"]);
Route::post("/users", [UserController::class, "store"]);
Route::put("/users/{id}", [UserController::class, "update"]);
Route::delete("/users/{id}", [UserController::class, "destroy"]);
Route::get("/infos", [InfoController::class, "index"]);
Route::get("/infos/{id}", [InfoController::class, "show"]);
Route::post("/infos", [InfoController::class, "store"]);
Route::put("/infos/{id}", [InfoController::class, "update"]);
Route::delete("/infos/{id}", [InfoController::class, "destroy"]);
Route::post("/images", [ImageController::class, "store"]);
Route::delete("/images/{id}", [ImageController::class, "destroy"]);

@ -1,3 +1,4 @@
*
!private/
!public/
!.gitignore

@ -0,0 +1,2 @@
*
!.gitignore

@ -1,18 +0,0 @@
/** @type {import('tailwindcss').Config} */
export default {
darkMode: 'class',
content: [
"./resources/**/*.blade.php",
"./resources/**/*.js",
"./resources/**/*.vue",
],
theme: {
screens: {
'tablet': '640px',
'laptop': '1280px',
'desktop': '1920px',
},
extend: {},
},
plugins: [],
}

@ -1,8 +0,0 @@
# todo
* creer base du site laravel vue.js tailwind
* creer la base de donné et les migration
* creer les utilisateur
* creer les controller/API d'authentification
* creer les models des donnée du site
* creer les API de ces donnée
* creer les pages avec vue.js
Loading…
Cancel
Save