TracksController.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using molilian.core;
  2. using dodohold.core;
  3. using Microsoft.AspNetCore.Mvc;
  4. using System.Text.Json;
  5. using TencentCloud.Ecm.V20190719.Models;
  6. using YunhuiKit;
  7. namespace molilian.api.Controllers
  8. {
  9. [ApiController]
  10. [Route("[controller]/[action]")]
  11. public class TracksController : ControllerBase
  12. {
  13. protected IHttpContextAccessor _accessor;
  14. public TracksController(IHttpContextAccessor accessor)
  15. {
  16. _accessor = accessor;
  17. }
  18. [HttpGet]
  19. public async Task<ActionResult> Track([FromQuery] int track_id, [FromQuery] string unique_id)
  20. {
  21. if (track_id <= 0)
  22. {
  23. return new APIResult(new { success = false, message = "miss" });
  24. }
  25. var link = await TracksCore.GetLinkByIdAsync(track_id);
  26. if (link == null)
  27. {
  28. return new APIResult(new { success = false, message = "not found" });
  29. }
  30. var dto = new TrackRequestLogDTO
  31. {
  32. track_id = track_id,
  33. event_type = link.event_type,
  34. platform = link.platform,
  35. typename = link.platform,
  36. scene = link.scene,
  37. unique_id = unique_id,
  38. ip = _accessor.HttpContext.GetUserIp(),
  39. user_agent = Request.Headers.UserAgent.ToString(),
  40. referer = Request.Headers.Referer.ToString()
  41. };
  42. _ = TracksCore.LogTrackRequestAsync(dto);
  43. _ = TracksCore.TrackAsync(link);
  44. return new APIResult(new { success = true, message = "ok" });
  45. }
  46. [HttpPost]
  47. public async Task<ActionResult> Create([FromQuery] string eventType, [FromQuery] string platform = "", [FromQuery] string typename = "", [FromQuery] string scene = "", [FromQuery] string uniqueId = "", [FromQuery] string description = "")
  48. {
  49. if (string.IsNullOrWhiteSpace(typename)) typename = platform;
  50. var link = await TracksCore.CreateLinkAsync(eventType, typename, scene, uniqueId, description);
  51. if (link == null)
  52. {
  53. return new APIResult(new { success = false, message = "invalid params or eventType" });
  54. }
  55. //var request = _accessor.HttpContext!.Request;
  56. //string url = $"{request.Scheme}://{request.Host}{link.path}";
  57. return new APIResult(new { success = true, message = "ok", url = link.path });
  58. }
  59. [HttpGet]
  60. public async Task<ActionResult> Daily([FromQuery] int daysAgo = 1, [FromQuery] string reportDate = "")
  61. {
  62. DateTime date;
  63. if (!string.IsNullOrWhiteSpace(reportDate) && DateTime.TryParse(reportDate, out var parsed))
  64. {
  65. date = parsed.Date;
  66. }
  67. else
  68. {
  69. if (daysAgo <= 0) daysAgo = 1;
  70. date = DateTime.Now.AddDays(-daysAgo).Date;
  71. }
  72. int rows = await TracksCore.FlushDailyAsync(DateTime.Now.Date);
  73. rows += await TracksCore.FlushDailyAsync(date);
  74. return new APIResult(new { success = true, message = "ok", rows });
  75. }
  76. }
  77. }