GameEnterLog.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\DB;
  5. class GameEnterLog extends Model
  6. {
  7. const TABLE = 'agent.dbo.game_enter_log';
  8. protected $table = self::TABLE;
  9. public $timestamps = false;
  10. protected $fillable = [
  11. 'user_id',
  12. 'game_id',
  13. 'duration_ms',
  14. 'log_date',
  15. 'created_at',
  16. ];
  17. /**
  18. * Insert detail log and update daily aggregate.
  19. *
  20. * @param array $data user_id, game_id, duration_ms, log_date (optional)
  21. * @return bool
  22. */
  23. public static function addLog(array $data)
  24. {
  25. $userId = (int) ($data['user_id'] ?? 0);
  26. $gameId = (int) ($data['game_id'] ?? 0);
  27. $durationMs = (int) ($data['duration_ms'] ?? 0);
  28. $logDate = $data['log_date'] ?? date('Y-m-d');
  29. if ($gameId <= 0 || $durationMs < 0) {
  30. return false;
  31. }
  32. return DB::connection('write')->transaction(function () use ($userId, $gameId, $durationMs, $logDate) {
  33. $inserted = DB::connection('write')->table(self::TABLE)->insert([
  34. 'user_id' => $userId,
  35. 'game_id' => $gameId,
  36. 'duration_ms' => $durationMs,
  37. 'log_date' => $logDate,
  38. 'created_at' => date('Y-m-d H:i:s'),
  39. ]);
  40. if (!$inserted) {
  41. return false;
  42. }
  43. GameEnterDailyStat::incrementStat($gameId, $logDate, $durationMs);
  44. return true;
  45. });
  46. }
  47. }