Public Locked

Yeni Reedem Code ve Promosyonlar Hakkında Bilgilendirme

TheBoss
TheBoss Admin Efsane Üye
· Apr 15, 2026 at 1:45 AM · 20 views · 0 replies
Merhabalar.

Güncel Olarak ayın belirli günlerinde Sponsor olan veya aktif kullanılan araçlar, sistemler veya uygulamalar için Promosyon kodu ,
Güncel Olarak Kullanılan platformlar
•Steam
•Riot Games
•NTTgame
•Rise Online
•Metin2
•Silkroad
vb Oyun platformlarında Hediye Oyun kodu,

Her Ay Yeni Katılan 3 User için Premium Hediyesi.

Premium Dağıtımı Çekiliş ile yapılacaktır.

çekiliş şeffaflığı aşağıda paylaşılmıştır.

Spoiler
// Çekilecek ticket çekiliyor.
const ticket = await this.findFirst(user, ticketId);

// Verilecek çekiliş ödülü bulunuyor.
const ticketPrize = await this.prismaService.ticketPrize.findFirst({
where: {
id: ticketPrizeId,
ticketId: ticket.id,
},
});

// Biletlerin dağıtılıp dağıtılmadığı kontrol ediliyor.
if (
ticket.status !== TicketStatus.TICKETS_DISTRIBUTED &&
ticket.objectionStatus !== TicketObjectionStatus.READY
) {
throw new BadRequestException('shared.TICKETS_HAS_NOT_DISTRIBUTED');
}

// Ödülün miktarı kontrol ediliyor.
if (ticketPrize.givenPrizeCount + dto.prizeCount > ticketPrize.prizeCount) {
throw new BadRequestException('promotion.TICKET_PRIZE_ALREADY_GIVEN');
}

// Ödül alabilecek bilet yoksa işlem iptal oluyor.
const totalTicketCount = await this.ticketUserModel.countDocuments({
ticketId,
isWin: false,
});

if (totalTicketCount < dto.prizeCount) {
throw new BadRequestException('promotion.NOT_ENOUGH_TICKETS');
}

// Ödül verilecek bilet kadar ödül verme kodu çalışıyor.
const maxTryCount = dto.prizeCount * 3;
let tryCount = 0;

// Verilecek ödül miktar kadar ödül verme döngüsü
for (let i = 0; i < dto.prizeCount; i++) {

// Kazanan sınırına ulaşmış kullanıcılar filtreleniyor
const userWinCountMap = new Map();
const userWins = await this.prismaService.ticketWinner.groupBy({
by: ['userId'],
where: {
ticketId: ticket.id,
},
_count: {
userId: true,
},
});

userWins.forEach((win) => {
userWinCountMap.set(win.userId, win._count.userId);
});

let notWinIds = [];

userWinCountMap.forEach((value, key) => {
value === ticket.winPerUser ? notWinIds.push(key) : null;
});

// Kazananlar arasından rastgele bir tane seçiyor
const [winnerTicket] = await this.ticketUserModel.aggregate([
{
$match: {
ticketId,
isWin: false,
userId: { $nin: notWinIds },
},
},
{ $sample: { size: 1 } },
]);

if (!winnerTicket) continue;

// Kazanan kullanıcının kazanma sayısı kontrol ediliyor
const userWinCount = await this.prismaService.ticketWinner.count({
where: {
ticketId: ticket.id,
userId: winnerTicket.userId,
},
});

// Tüm denemelere rağmen kazanacak bilet bulunamazsa hata
if (tryCount >= maxTryCount) {
throw new BadRequestException('promotion.MAX_TRY_COUNT_REACHED');
}

if (userWinCount + 1 <= ticket.winPerUser) {
await this.prismaService.$transaction(async (tx) => {

const userNotWinCount = await this.ticketUserModel.countDocuments({
ticketId,
isWin: false,
userId: winnerTicket.userId,
});

const allNotWinCount = await this.ticketUserModel.countDocuments({
ticketId,
isWin: false,
});

// Kazanan kayıt oluşturuluyor
await tx.ticketWinner.create({
data: {
ticketNumber: winnerTicket.ticketNumber,
userId: winnerTicket.userId,
ticketId: ticket.id,
ticketPrizeId: ticketPrize.id,
ticketUserId: winnerTicket._id as string,
winRate: parseFloat(
((userNotWinCount / allNotWinCount) * 100).toFixed(2)
),
},
});

// Kazanan bilet siteye bildiriliyor
await this.sendDataToClient({
winnerTicket,
});

// Kazanan bilet güncelleniyor
await this.ticketUserModel.updateOne(
{ _id: winnerTicket._id },
{ $set: { isWin: true } }
);

// Verilen ödül artırılıyor
await tx.ticketPrize.update({
where: { id: ticketPrize.id },
data: { givenPrizeCount: { increment: 1 } },
});
});
} else {
i--;
}

tryCount++;
}

// Tüm ödüller verildiyse sistem ticketi tamamlıyor
await this.prismaService.ticket.update({
where: { id: ticket.id },
data: { status: TicketStatus.COMPLETED },
});


Herkese Sağlıklı Günler Dilerim.

not: Kullanıcı artması durumunda kod sayısı artacaktır.

Benzer Konular

Tümünü Gör

Cevaplar (0)

Henüz cevap yok. Be the first!

Giriş Yap to join the discussion

Log In