Последняя версия с сервера прошлого разработчика

This commit is contained in:
2025-07-10 04:35:51 +00:00
commit c731570032
1174 changed files with 134314 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Domain\Musics\Action;
use DB;
use App\Domain\Feeds\Models\Feed;
use App\Domain\Feeds\ToFeedAction;
use App\Domain\Musics\DataTransferObjects\MusicData;
class CreateMusicAction implements ToFeedAction
{
public function __invoke(MusicData $musicData)
{
DB::beginTransaction();
if(empty($musicData->title)){
$file_count = count($musicData->musics);
$first_file = $musicData->musics[0]->getClientOriginalName();
$filename = pathinfo($first_file, PATHINFO_FILENAME);
$musicData->title = $filename . ' (' . $file_count . ')';
}
$musicFeed = Feed::create([
'title' => $musicData->title,
'body' => $musicData->body,
'price' => $musicData->price,
'is_paid' => $musicData->is_paid,
'user_id' => $musicData->user->id,
'is_ads' => false,
'type' => 'musics',
]);
$result_time_common = $this->calcTimeFile($musicData->times);
foreach ($musicData->musics as $music) {
$name = $music->getClientOriginalName();
$time = @$result_time_common[$name];
$musicFeed->addMedia($music)
->withCustomProperties(['time' => $time])
->toMediaCollection('common');
}
if($musicData->is_loaded_preview){
$musicFeed->addMedia($musicData->preview)->toMediaCollection('preview');
}
if($musicData->is_loaded_paid_music){
$result_time_paids = $this->calcTimeFile($musicData->times_paid);
foreach ($musicData->musics_paid as $music) {
$name = $music->getClientOriginalName();
$time = @$result_time_paids[$name];
$musicFeed->addMedia($music)
->withCustomProperties(['time' => $time])
->toMediaCollection('paid');
}
}
DB::commit();
return $musicFeed;
}
protected function calcTimeFile($time_musics)
{
$times = array_map(function($line){
$line = explode(',', $line);
return [$line[0] => $line[1]];
}, $time_musics);
return array_merge(...$times);
}
}

View File

@@ -0,0 +1,95 @@
<?php
namespace App\Domain\Musics\Action;
use DB;
use App\Domain\Feeds\Models\Feed;
use App\Domain\Feeds\ToFeedAction;
use App\Domain\Feeds\Enums\StatusEnum;
use App\Domain\Musics\DataTransferObjects\MusicData;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class UpdateMusicAction implements ToFeedAction
{
public $musicFeed;
public function __construct(Feed $musicFeed)
{
$this->musicFeed = $musicFeed;
}
public function __invoke(MusicData $musicData)
{
$status = $this->musicFeed->status;
if($status === StatusEnum::BANNED()){
$status = StatusEnum::EDITABLE();
}
if($status === StatusEnum::APPROVED()){
$status = StatusEnum::EDITABLE();
}
DB::beginTransaction();
$this->musicFeed->fill([
'title' => $musicData->title,
'body' => $musicData->body,
'price' => $musicData->price,
'is_paid' => $musicData->is_paid,
'is_ads' => false,
'status' => $status,
])->save();
if($musicData->is_loaded_preview){
if($existPreview = $this->musicFeed->getMedia('preview')->first()){
$existPreview->delete();
}
$this->musicFeed->addMedia($musicData->preview)->toMediaCollection('preview');
}
if($musicData->is_loaded_music){
$result_time_common = $this->calcTimeFile($musicData->times);
foreach ($musicData->musics as $music) {
$name = $music->getClientOriginalName();
$time = @$result_time_common[$name];
$this->musicFeed->addMedia($music)
->withCustomProperties(['time' => $time])
->toMediaCollection('common');
}
}
if($musicData->is_loaded_paid_music){
$result_time_paids = $this->calcTimeFile($musicData->times_paid);
foreach ($musicData->musics_paid as $music) {
$name = $music->getClientOriginalName();
$time = @$result_time_paids[$name];
$this->musicFeed->addMedia($music)
->withCustomProperties(['time' => $time])
->toMediaCollection('paid');
}
}
if(count($musicData->removedItems)){
foreach ($musicData->removedItems as $removedItem) {
if($media = Media::find($removedItem)){
$media->delete();
}
}
}
DB::commit();
return $this->musicFeed->refresh();
}
protected function calcTimeFile($time_musics)
{
$times = array_map(function($line){
$line = explode(',', $line);
return [$line[0] => $line[1]];
}, $time_musics);
return array_merge(...$times);
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Domain\Musics\DataTransferObjects;
use App\Http\Requests\MusicFormRequest;
use Spatie\DataTransferObject\DataTransferObject;
class MusicData extends DataTransferObject
{
public $title;
public $body;
public $user;
public $musics;
public $musics_paid;
public $preview;
public $is_loaded_music;
public $is_loaded_paid_music;
public $is_loaded_preview;
public $price;
public $times;
public $times_paid;
public $is_paid;
public $tags;
public $removedItems;
public static function fromRequest(MusicFormRequest $request)
{
return new self([
'title' => $request->input('title'),
'body' => $request->input('body'),
'price' => $request->input('price'),
'is_paid' => $request->input('is_paid'),
'user' => auth()->user(),
'tags' => $request->input('tags') ?? [],
'preview' => $request->file('preview'),
'is_loaded_preview' => $request->hasFile('preview'),
'musics' => $request->file('musics'),
'is_loaded_music' => $request->hasFile('musics'),
'musics_paid' => $request->file('musics_paid'),
'is_loaded_paid_music' => $request->hasFile('musics_paid'),
'times' => $request->input('times'),
'times_paid' => $request->input('times_paid'),
'removedItems' => $request->input('removedItems') ?? [],
]);
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Domain\Musics\Models;
use App\Domain\Complaints\Models\Complaint;
use App\Domain\Feeds\Models\Feed;
use App\Models\Model;
use App\Models\User;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class Music extends Model implements HasMedia
{
use InteractsWithMedia;
protected $table = 'musics';
public function complaints()
{
return $this->morphMany(Complaint::class, 'complaintable');
}
public function feed()
{
return $this->morphOne(Feed::class, 'feedable');
}
public function user()
{
return $this->belongsTo(User::class);
}
}