Skip to content

Commit

Permalink
feat: add release for admin
Browse files Browse the repository at this point in the history
  • Loading branch information
amrron committed Nov 5, 2024
1 parent 36b8c0e commit bd15580
Show file tree
Hide file tree
Showing 11 changed files with 624 additions and 24 deletions.
46 changes: 46 additions & 0 deletions app/Http/Controllers/AdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

namespace App\Http\Controllers;

use Log;
use App\Models\User;
use App\Models\Release;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class AdminController extends Controller
{
Expand Down Expand Up @@ -55,4 +58,47 @@ public function logout(Request $request)
// Redirect ke halaman utama
return redirect('/admin/login');
}

public function release() {
$releases = Release::all();

return view('pages.admin.release', compact('releases'));
}

public function newRelease(Request $request) {
// Validasi memastikan salah satu dari url atau apk_file tersedia
$request->validate([
'version' => 'required|string',
'url' => 'nullable|string|required_without:apk_file',
'changelog' => 'required|string'
]);

// Ambil versi terbaru dari database
$latestRelease = Release::orderBy('created_at', 'desc')->first();

// Cek jika ada versi sebelumnya dan validasi apakah versi baru lebih tinggi
if ($latestRelease && version_compare($request->version, $latestRelease->version, '<=')) {
return back()->with('error', 'Versi yang dimasukkan harus lebih tinggi dari versi terbaru (' . $latestRelease->version . ')');
}

try {
DB::beginTransaction();

$release = new Release();
$release->version = $request->version;
// Menggunakan URL yang diunggah atau URL yang dimasukkan sebagai link
$release->url = $request->url;
$release->changelog = $request->changelog;
$release->save();

DB::commit();

return back()->with('success', 'Rilis baru berhasil ditambahkan');

} catch (\Throwable $th) {
DB::rollBack();

return back()->with('error', 'Terjadi kesalahan saat menambahkan rilis baru');
}
}
}
67 changes: 67 additions & 0 deletions app/Http/Controllers/ReleaseController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php
namespace App\Http\Controllers;

use App\Http\Resources\ReleaseResource;
use App\Models\Release;
use Illuminate\Http\Request;
use Pion\Laravel\ChunkUpload\Handler\HandlerFactory;
use Pion\Laravel\ChunkUpload\Receiver\FileReceiver;
use Pion\Laravel\ChunkUpload\Exceptions\UploadMissingFileException;
use Illuminate\Support\Facades\Storage;

class ReleaseController extends Controller
{
public function uploadFile(Request $request)
{
// Create the file receiver
$receiver = new FileReceiver("file", $request, HandlerFactory::classFromRequest($request));

// Check if the upload is success or has failed
if ($receiver->isUploaded() === false) {
throw new UploadMissingFileException();
}

// Receive the file
$save = $receiver->receive();

// Check if the upload has finished
if ($save->isFinished()) {
return $this->saveFile($save->getFile(), $request->input('version'));
}

// We are in chunk mode, lets send the current progress
$handler = $save->handler();
return response()->json([
"done" => $handler->getPercentageDone(),
"status" => true
]);
}

protected function saveFile($file, $version)
{
// Generate the file name
$fileName = "Foody_v{$version}.apk";

$disk = Storage::disk('public');
$path = $disk->putFileAs('release', $file, $fileName);

// Delete the chunked file
unlink($file->getPathname());

return response()->json([
'path' => asset('storage/' . $path),
'filename' => $fileName,
'status' => true
]);
}

public function latest() {
$release = Release::latest()->first();

return response()->json([
'success' => true,
'status' => 'success',
'data' => new ReleaseResource($release)
]);
}
}
25 changes: 25 additions & 0 deletions app/Http/Resources/ReleaseResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class ReleaseResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
"id" => $this->id,
"version" => $this->version,
"url" => $this->url,
"changelog" => $this->changelog,
"release_date" => $this->created_at->format('Y-m-d')
];
}
}
14 changes: 14 additions & 0 deletions app/Models/Release.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Release extends Model
{
use HasFactory, HasUuids;

protected $guraed = [];
}
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
"laravel/tinker": "^2.9",
"midtrans/midtrans-php": "^2.6",
"openai-php/client": "^0.10.1",
"openai-php/laravel": "^0.10.1"
"openai-php/laravel": "^0.10.1",
"pion/laravel-chunk-upload": "^1.5"
},
"require-dev": {
"fakerphp/faker": "^1.23",
Expand Down
68 changes: 67 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions database/migrations/2024_11_05_101751_create_releases_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?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('releases', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('version')->unique();
$table->string('url');
$table->text('changelog');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('releases');
}
};
Loading

0 comments on commit bd15580

Please sign in to comment.