WeightConfigController.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Redis;
  6. class WeightConfigController extends Controller
  7. {
  8. const REDIS_KEY_CONFIG = 'WeightConfig1234:config';
  9. const REDIS_KEY_CLICKS = 'WeightConfig1234:clicks';
  10. const REDIS_KEY_CLICKS_DAILY_PREFIX = 'WeightConfig1234:clicks:daily:';
  11. const VALID_IDS = [1, 2, 3, 4];
  12. public static function defaultConfig()
  13. {
  14. return [1 => 20, 2 => 30, 3 => 40, 4 => 10];
  15. }
  16. public static function getConfig()
  17. {
  18. $raw = Redis::get(self::REDIS_KEY_CONFIG);
  19. if (!$raw) {
  20. return self::defaultConfig();
  21. }
  22. $data = json_decode($raw, true);
  23. if (!is_array($data)) {
  24. return self::defaultConfig();
  25. }
  26. $result = [];
  27. foreach (self::VALID_IDS as $id) {
  28. $result[$id] = isset($data[$id]) ? intval($data[$id]) : 0;
  29. }
  30. return $result;
  31. }
  32. public function clickRecord(Request $request)
  33. {
  34. $id = intval($request->input('id'));
  35. if (!in_array($id, self::VALID_IDS)) {
  36. return apiReturnFail('invalid id');
  37. }
  38. Redis::hincrby(self::REDIS_KEY_CLICKS, $id, 1);
  39. $dailyKey = self::REDIS_KEY_CLICKS_DAILY_PREFIX . date('Y-m-d');
  40. Redis::hincrby($dailyKey, $id, 1);
  41. Redis::expire($dailyKey, 60 * 60 * 24 * 90);
  42. return apiReturnSuc(['id' => $id]);
  43. }
  44. }