mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-24 12:07:23 +08:00
bonus can buy: tmp invite + rainbow ID + change username card
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
<?php
|
||||
namespace App\Repositories;
|
||||
|
||||
use App\Exceptions\NexusException;
|
||||
use App\Models\BonusLogs;
|
||||
use App\Models\HitAndRun;
|
||||
use App\Models\Invite;
|
||||
use App\Models\Medal;
|
||||
use App\Models\Setting;
|
||||
use App\Models\User;
|
||||
use App\Models\UserMedal;
|
||||
use App\Models\UserMeta;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Nexus\Database\NexusDB;
|
||||
@@ -95,6 +98,85 @@ class BonusRepository extends BaseRepository
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function consumeToBuyTemporaryInvite($uid, $count = 1): bool
|
||||
{
|
||||
$user = User::query()->findOrFail($uid);
|
||||
$requireBonus = BonusLogs::getBonusForBuyTemporaryInvite();
|
||||
$toolRep = new ToolRepository();
|
||||
$hashArr = $toolRep->generateUniqueInviteHash([], $count, $count);
|
||||
NexusDB::transaction(function () use ($user, $requireBonus, $hashArr) {
|
||||
$comment = nexus_trans('bonus.comment_buy_temporary_invite', [
|
||||
'bonus' => $requireBonus,
|
||||
'count' => count($hashArr)
|
||||
], $user->locale);
|
||||
do_log("comment: $comment");
|
||||
$this->consumeUserBonus($user, $requireBonus, BonusLogs::BUSINESS_TYPE_BUY_TEMPORARY_INVITE, $comment);
|
||||
$invites = [];
|
||||
foreach ($hashArr as $hash) {
|
||||
$invites[] = [
|
||||
'inviter' => $user->id,
|
||||
'invitee' => '',
|
||||
'hash' => $hash,
|
||||
'valid' => 0,
|
||||
'expired_at' => Carbon::now()->addDays(Invite::TEMPORARY_INVITE_VALID_DAYS),
|
||||
'created_at' => Carbon::now(),
|
||||
];
|
||||
}
|
||||
Invite::query()->insert($invites);
|
||||
});
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public function consumeToBuyRainbowId($uid, $duration = 30): bool
|
||||
{
|
||||
$user = User::query()->findOrFail($uid);
|
||||
$requireBonus = BonusLogs::getBonusForBuyRainbowId();
|
||||
NexusDB::transaction(function () use ($user, $requireBonus, $duration) {
|
||||
$comment = nexus_trans('bonus.comment_buy_rainbow_id', [
|
||||
'bonus' => $requireBonus,
|
||||
'duration' => $duration,
|
||||
], $user->locale);
|
||||
do_log("comment: $comment");
|
||||
$this->consumeUserBonus($user, $requireBonus, BonusLogs::BUSINESS_TYPE_BUY_RAINBOW_ID, $comment);
|
||||
$metaData = [
|
||||
'meta_key' => UserMeta::META_KEY_PERSONALIZED_USERNAME,
|
||||
'duration' => $duration,
|
||||
];
|
||||
$userRep = new UserRepository();
|
||||
$userRep->addMeta($user, $metaData, $metaData, false);
|
||||
});
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public function consumeToBuyChangeUsernameCard($uid): bool
|
||||
{
|
||||
$user = User::query()->findOrFail($uid);
|
||||
$requireBonus = BonusLogs::getBonusForBuyChangeUsernameCard();
|
||||
if (UserMeta::query()->where('uid', $uid)->where('meta_key', UserMeta::META_KEY_CHANGE_USERNAME)->exists()) {
|
||||
throw new NexusException("user already has change username card");
|
||||
}
|
||||
NexusDB::transaction(function () use ($user, $requireBonus) {
|
||||
$comment = nexus_trans('bonus.comment_buy_change_username_card', [
|
||||
'bonus' => $requireBonus,
|
||||
], $user->locale);
|
||||
do_log("comment: $comment");
|
||||
$this->consumeUserBonus($user, $requireBonus, BonusLogs::BUSINESS_TYPE_BUY_CHANGE_USERNAME_CARD, $comment);
|
||||
$metaData = [
|
||||
'meta_key' => UserMeta::META_KEY_CHANGE_USERNAME,
|
||||
];
|
||||
$userRep = new UserRepository();
|
||||
$userRep->addMeta($user, $metaData, $metaData, false);
|
||||
});
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public function consumeUserBonus($user, $requireBonus, $logBusinessType, $logComment = '', array $userUpdates = [])
|
||||
{
|
||||
if (!isset(BonusLogs::$businessTypes[$logBusinessType])) {
|
||||
|
||||
@@ -466,7 +466,7 @@ class UserRepository extends BaseRepository
|
||||
return true;
|
||||
}
|
||||
|
||||
public function addMeta($user, array $metaData, array $keyExistsUpdates = [])
|
||||
public function addMeta($user, array $metaData, array $keyExistsUpdates = [], $notify = true)
|
||||
{
|
||||
$user = $this->getUser($user);
|
||||
$locale = $user->locale;
|
||||
@@ -484,7 +484,9 @@ class UserRepository extends BaseRepository
|
||||
} else {
|
||||
$durationText = nexus_trans('label.permanent', [], $locale);
|
||||
}
|
||||
$message['msg'] = nexus_trans('user.grant_props_notification.body', ['name' => $metaName, 'operator' => Auth::user()->username, 'duration' => $durationText], $locale);
|
||||
$operatorId = get_user_id();
|
||||
$operatorInfo = get_user_row($operatorId);
|
||||
$message['msg'] = nexus_trans('user.grant_props_notification.body', ['name' => $metaName, 'operator' => $operatorInfo['username'], 'duration' => $durationText], $locale);
|
||||
if (!empty($metaData['duration'])) {
|
||||
$metaData['deadline'] = now()->addDays($metaData['duration']);
|
||||
}
|
||||
@@ -520,7 +522,9 @@ class UserRepository extends BaseRepository
|
||||
}
|
||||
if ($result) {
|
||||
clear_user_cache($user->id, $user->passkey);
|
||||
Message::query()->insert($message);
|
||||
if ($notify) {
|
||||
Message::add($message);
|
||||
}
|
||||
}
|
||||
do_log($log);
|
||||
return $result;
|
||||
@@ -570,7 +574,7 @@ class UserRepository extends BaseRepository
|
||||
return true;
|
||||
}
|
||||
|
||||
public function addTemporaryInvite(User $operator, int $uid, string $action, int $count, int|null $days, string|null $reason = '')
|
||||
public function addTemporaryInvite(User|null $operator, int $uid, string $action, int $count, int|null $days, string|null $reason = '')
|
||||
{
|
||||
do_log("uid: $uid, action: $action, count: $count, days: $days, reason: $reason");
|
||||
$action = strtolower($action);
|
||||
@@ -578,7 +582,9 @@ class UserRepository extends BaseRepository
|
||||
throw new \InvalidArgumentException("days or count lte 0");
|
||||
}
|
||||
$targetUser = User::query()->findOrFail($uid, User::$commonFields);
|
||||
$this->checkPermission($operator, $targetUser);
|
||||
if ($operator) {
|
||||
$this->checkPermission($operator, $targetUser);
|
||||
}
|
||||
$toolRep = new ToolRepository();
|
||||
$locale = $targetUser->locale;
|
||||
|
||||
@@ -587,7 +593,7 @@ class UserRepository extends BaseRepository
|
||||
$body = nexus_trans('message.temporary_invite_change.body', [
|
||||
'change_type' => $changeType,
|
||||
'count' => $count,
|
||||
'operator' => $operator->username,
|
||||
'operator' => $operator->username ?? '',
|
||||
'reason' => $reason,
|
||||
], $locale);
|
||||
$message = [
|
||||
@@ -611,7 +617,7 @@ class UserRepository extends BaseRepository
|
||||
];
|
||||
}
|
||||
}
|
||||
NexusDB::transaction(function () use ($uid, $message, $inviteData, $count) {
|
||||
NexusDB::transaction(function () use ($uid, $message, $inviteData, $count, $operator) {
|
||||
if (!empty($inviteData)) {
|
||||
Invite::query()->insert($inviteData);
|
||||
do_log("[INSERT TEMPORARY INVITE] to $uid, count: $count");
|
||||
@@ -624,7 +630,9 @@ class UserRepository extends BaseRepository
|
||||
;
|
||||
do_log("[DELETE TEMPORARY INVITE] of $uid, count: $count");
|
||||
}
|
||||
Message::add($message);
|
||||
if ($operator) {
|
||||
Message::add($message);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user