WeightConfigController.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 getWeights(Request $request)
  33. {
  34. $config = self::getConfig();
  35. return apiReturnSuc($config);
  36. }
  37. public function clickRecord(Request $request)
  38. {
  39. $id = intval($request->input('id'));
  40. if (!in_array($id, self::VALID_IDS)) {
  41. return apiReturnFail('invalid id');
  42. }
  43. Redis::hincrby(self::REDIS_KEY_CLICKS, $id, 1);
  44. $dailyKey = self::REDIS_KEY_CLICKS_DAILY_PREFIX . date('Y-m-d');
  45. Redis::hincrby($dailyKey, $id, 1);
  46. Redis::expire($dailyKey, 60 * 60 * 24 * 90);
  47. return apiReturnSuc(['id' => $id]);
  48. }
  49. }