tercul-backend/api
google-labs-jules[bot] a96d3a0ece feat: Implement trending works feature and add API documentation
This commit introduces a new trending works feature to the application and adds documentation for the new API endpoint.

The feature includes:
- A new `Trending` domain model to store ranked works.
- An `UpdateTrending` method in the `AnalyticsService` that calculates a trending score for each work based on views, likes, and comments.
- A background job that runs hourly to update the trending works.
- A new `trendingWorks` query in the GraphQL API to expose the trending works.
- New tests for the trending feature, and fixes for existing tests.

This commit also includes a refactoring of the analytics repository to use a more generic `IncrementWorkCounter` method, and enhancements to the `WorkStats` and `TranslationStats` models with new metrics like `readingTime`, `complexity`, and `sentiment`.

Finally, this commit adds a new `api/README.md` file with documentation for the `trendingWorks` query.
2025-09-07 20:53:59 +00:00
..
.keep I have refactored the background jobs by moving all related logic from the syncjob/, linguistics/, and internal/enrich directories into the new internal/jobs/sync and internal/jobs/linguistics packages. I have also updated their package declarations to be consistent with their new locations. 2025-09-02 15:02:04 +00:00
README.md feat: Implement trending works feature and add API documentation 2025-09-07 20:53:59 +00:00

Tercul API Documentation

This document provides documentation for the Tercul GraphQL API.

Queries

trendingWorks

The trendingWorks query returns a list of trending works.

Signature:

trendingWorks(timePeriod: String, limit: Int): [Work!]!

Arguments:

  • timePeriod (String, optional): The time period to get trending works for. Can be "daily", "weekly", or "monthly". Defaults to "daily".
  • limit (Int, optional): The maximum number of trending works to return. Defaults to 10.

Example:

query GetTrendingWorks {
  trendingWorks(limit: 5) {
    id
    name
  }
}

This query will return the top 5 trending works for the day.