Skip to content

Commit e8a4534

Browse files
authored
Add badge on sponsor (#113)
* Enabled publish post only in production env * Add sponsors list on sponsor page * 💄 Update user avatar * ♻️ Recatoring and fix typo error * 🍱 Compile Assets * ♻️ Refactoring with Pint
1 parent 46b91ca commit e8a4534

38 files changed

+187
-59
lines changed

app/Console/Commands/PostArticleToTelegram.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ class PostArticleToTelegram extends Command
1717

1818
public function handle(AnonymousNotifiable $notifiable): void
1919
{
20-
if ($article = Article::nexForSharingToTelegram()) {
21-
$notifiable->notify(new PostArticleToTelegramNotification($article));
20+
if (app()->environment('production')) {
21+
if ($article = Article::nexForSharingToTelegram()) {
22+
$notifiable->notify(new PostArticleToTelegramNotification($article));
2223

23-
$article->markAsPublish();
24+
$article->markAsPublish();
25+
}
2426
}
2527
}
2628
}

app/Console/Commands/PostArticleToTwitter.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ class PostArticleToTwitter extends Command
1717

1818
public function handle(AnonymousNotifiable $notifiable): void
1919
{
20-
if ($article = Article::nextForSharing()) {
21-
$notifiable->notify(new PostArticleToTwitterNotification($article));
20+
if (app()->environment('production')) {
21+
if ($article = Article::nextForSharing()) {
22+
$notifiable->notify(new PostArticleToTwitterNotification($article));
2223

23-
$article->markAsShared();
24+
$article->markAsShared();
25+
}
2426
}
2527
}
2628
}

app/Console/Commands/SendWelcomeMailToUsers.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace App\Console\Commands;
66

7+
use App\Mail\Welcome;
78
use App\Models\User;
89
use Illuminate\Console\Command;
910
use Illuminate\Support\Facades\Mail;
@@ -17,7 +18,7 @@ class SendWelcomeMailToUsers extends Command
1718
public function handle(): void
1819
{
1920
foreach (User::all() as $user) {
20-
Mail::to($user)->queue(new \App\Mail\Welcome($user));
21+
Mail::to($user)->queue(new Welcome($user));
2122
}
2223
}
2324
}

app/Gamify/Points/DiscussionCreated.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ public function __construct(Discussion $subject)
2020
public function payee(): User
2121
{
2222
// @phpstan-ignore-next-line
23-
return $this->getSubject()->author;
23+
return $this->getSubject()->user;
2424
}
2525
}

app/Http/Controllers/HomeController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public function __invoke(): View
2222
});
2323

2424
$latestArticles = Cache::remember('latestArticles', now()->addHour(), function () {
25-
return Article::with(['tags', 'user'])
25+
return Article::with(['tags', 'user', 'user.transactions'])
2626
->published()
2727
->orderByDesc('sponsored_at')
2828
->orderByDesc('published_at')
@@ -33,15 +33,15 @@ public function __invoke(): View
3333
});
3434

3535
$latestThreads = Cache::remember('latestThreads', now()->addHour(), function () {
36-
return Thread::with('user')->whereNull('solution_reply_id')
36+
return Thread::with(['user', 'user.transactions'])->whereNull('solution_reply_id')
3737
->whereBetween('threads.created_at', [now()->subMonths(3), now()])
3838
->inRandomOrder()
3939
->limit(4)
4040
->get();
4141
});
4242

4343
$latestDiscussions = Cache::remember('latestDiscussions', now()->addHour(), function () {
44-
return Discussion::with('user')
44+
return Discussion::with(['user', 'user.transactions'])
4545
->recent()
4646
->orderByViews()
4747
->limit(3)

app/Http/Controllers/SponsoringController.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,24 @@
44

55
namespace App\Http\Controllers;
66

7+
use App\Models\Transaction;
78
use Illuminate\Contracts\View\View;
9+
use Illuminate\Support\Facades\Cache;
810

911
class SponsoringController extends Controller
1012
{
1113
public function sponsors(): View
1214
{
13-
return view('sponsors.index');
15+
$sponsors = Cache::remember(
16+
'sponsors',
17+
3600,
18+
fn () => Transaction::with(['user', 'user.media'])
19+
->scopes('complete')
20+
->get(['id', 'user_id', 'metadata'])
21+
);
22+
23+
return view('sponsors.index', [
24+
'sponsors' => $sponsors
25+
]);
1426
}
1527
}

app/Http/Livewire/Articles/Browse.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function validSort(string $sort): bool
4949

5050
public function render(): View
5151
{
52-
$articles = Article::with(['tags', 'user'])
52+
$articles = Article::with(['tags', 'user', 'user.transactions'])
5353
->withCount(['views', 'reactions'])
5454
->published()
5555
->notPinned()

app/Models/Transaction.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace App\Models;
66

7+
use App\Enums\TransactionStatus;
8+
use Illuminate\Database\Eloquent\Builder;
79
use Illuminate\Database\Eloquent\Concerns\HasUuids;
810
use Illuminate\Database\Eloquent\Factories\HasFactory;
911
use Illuminate\Database\Eloquent\Model;
@@ -28,6 +30,11 @@ public function user(): BelongsTo
2830
return $this->belongsTo(User::class);
2931
}
3032

33+
public function scopeComplete(Builder $query): Builder
34+
{
35+
return $query->where('status', TransactionStatus::COMPLETE->value);
36+
}
37+
3138
public function getMetadata(string $name, string $default = ''): string | array
3239
{
3340
if ($this->metadata && array_key_exists($name, $this->metadata)) {

app/Models/User.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace App\Models;
66

7+
use App\Enums\TransactionStatus;
78
use App\Traits\HasProfilePhoto;
89
use App\Traits\HasSettings;
910
use App\Traits\HasUsername;
@@ -104,6 +105,11 @@ class User extends Authenticatable implements MustVerifyEmail, HasMedia, Featura
104105
protected $appends = [
105106
'profile_photo_url',
106107
'roles_label',
108+
'is_sponsor',
109+
];
110+
111+
protected $withCount = [
112+
'transactions'
107113
];
108114

109115
public function hasProvider(string $provider): bool
@@ -140,6 +146,19 @@ public function getRolesLabelAttribute(): string
140146
return 'N/A';
141147
}
142148

149+
public function getIsSponsorAttribute(): bool
150+
{
151+
if ($this->transactions_count > 0) {
152+
$transaction = $this->transactions()
153+
->where('status', TransactionStatus::COMPLETE->value)
154+
->first();
155+
156+
return (bool) $transaction;
157+
}
158+
159+
return false;
160+
}
161+
143162
public function isAdmin(): bool
144163
{
145164
return $this->hasRole('admin');

helpers/ModelHelper.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,7 @@ class IdeHelperThread
744744
* @property \Illuminate\Support\Carbon|null $created_at
745745
* @property \Illuminate\Support\Carbon|null $updated_at
746746
* @property-read \App\Models\User $user
747+
* @method static \Illuminate\Database\Eloquent\Builder|Transaction complete()
747748
* @method static \Illuminate\Database\Eloquent\Builder|Transaction newModelQuery()
748749
* @method static \Illuminate\Database\Eloquent\Builder|Transaction newQuery()
749750
* @method static \Illuminate\Database\Eloquent\Builder|Transaction query()
@@ -804,6 +805,7 @@ class IdeHelperTransaction
804805
* @property-read \App\Models\Enterprise|null $enterprise
805806
* @property-read \Illuminate\Database\Eloquent\Collection<int, \LaravelFeature\Model\Feature> $features
806807
* @property-read int|null $features_count
808+
* @property-read bool $is_sponsor
807809
* @property-read string|null $profile_photo_url
808810
* @property-read string $roles_label
809811
* @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection<int, \Spatie\MediaLibrary\MediaCollections\Models\Media> $media

0 commit comments

Comments
 (0)