- Update API routes for consistency and versioning. any communication with donetick will go through /api/v1. for external will user prefix /eapi/v1

- Update Readme and add Discord and Reddit
This commit is contained in:
Mo Tarbin 2025-01-02 23:21:05 -05:00
parent 776e510c0c
commit b7b434ae8c
8 changed files with 26 additions and 10 deletions

View file

@ -10,6 +10,14 @@ Donetick is an open-source, user-friendly app designed to help you organize task
![Screenshot](assets/screenshot.png) ![Screenshot](assets/screenshot.png)
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/donetick/donetick/go-release.yml)
![GitHub release (latest by date)](https://img.shields.io/github/v/release/donetick/donetick)
![Docker Pulls](https://img.shields.io/docker/pulls/donetick/donetick)
[![Discord](https://img.shields.io/discord/1272383484509421639)](https://discord.gg/6hSH6F33q7)
[![Reddit](https://img.shields.io/reddit/subreddit-subscribers/donetick)](https://www.reddit.com/r/donetick)
--- ---
## ✨ Features ## ✨ Features
@ -140,9 +148,17 @@ This project is licensed under the **AGPLv3**. See the [LICENSE](LICENSE) file f
--- ---
## 💬 Join the Discussion
For ideas or feature requests, please use GitHub Discussions. We also have a Discord server and a subreddit for those who prefer those platforms!
<img alt="Discord" src="https://img.shields.io/discord/1272383484509421639">
<img alt="Reddit" src="https://img.shields.io/reddit/subreddit-subscribers/donetick">
<img alt="GitHub Discussions" src="https://img.shields.io/github/discussions/donetick/donetick">
---
## 💡 Support Donetick ## 💡 Support Donetick
If you find it helpful, consider supporting us by starring the repository, contributing code, or sharing feedback! If you find it helpful, consider supporting us by starring the repository, contributing code, or sharing feedback!
--- ---

View file

@ -46,7 +46,7 @@ func (h *API) GetAllChores(c *gin.Context) {
func APIs(cfg *config.Config, api *API, r *gin.Engine, auth *jwt.GinJWTMiddleware, limiter *limiter.Limiter) { func APIs(cfg *config.Config, api *API, r *gin.Engine, auth *jwt.GinJWTMiddleware, limiter *limiter.Limiter) {
thingsAPI := r.Group("api/v1/chore") thingsAPI := r.Group("eapi/v1/chore")
thingsAPI.Use(utils.TimeoutMiddleware(cfg.Server.WriteTimeout), utils.RateLimitMiddleware(limiter)) thingsAPI.Use(utils.TimeoutMiddleware(cfg.Server.WriteTimeout), utils.RateLimitMiddleware(limiter))
{ {

View file

@ -1392,7 +1392,7 @@ func checkNextAssignee(chore *chModel.Chore, choresHistory []*chModel.ChoreHisto
func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) { func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) {
choresRoutes := router.Group("chores") choresRoutes := router.Group("api/v1/chores")
choresRoutes.Use(auth.MiddlewareFunc()) choresRoutes.Use(auth.MiddlewareFunc())
{ {
choresRoutes.GET("/", h.getChores) choresRoutes.GET("/", h.getChores)

View file

@ -427,7 +427,7 @@ func (h *Handler) AcceptJoinRequest(c *gin.Context) {
func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) { func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) {
log.Println("Registering routes") log.Println("Registering routes")
circleRoutes := router.Group("circles") circleRoutes := router.Group("api/v1/circles")
circleRoutes.Use(auth.MiddlewareFunc()) circleRoutes.Use(auth.MiddlewareFunc())
{ {
circleRoutes.GET("/members", h.GetCircleMembers) circleRoutes.GET("/members", h.GetCircleMembers)

View file

@ -164,7 +164,7 @@ func (h *Handler) deleteLabel(c *gin.Context) {
func Routes(r *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) { func Routes(r *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) {
labelRoutes := r.Group("labels") labelRoutes := r.Group("api/v1/labels")
labelRoutes.Use(auth.MiddlewareFunc()) labelRoutes.Use(auth.MiddlewareFunc())
{ {
labelRoutes.GET("", h.getLabels) labelRoutes.GET("", h.getLabels)

View file

@ -279,7 +279,7 @@ func (h *Handler) DeleteThing(c *gin.Context) {
} }
func Routes(r *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) { func Routes(r *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware) {
thingRoutes := r.Group("things") thingRoutes := r.Group("api/v1/things")
thingRoutes.Use(auth.MiddlewareFunc()) thingRoutes.Use(auth.MiddlewareFunc())
{ {
thingRoutes.POST("", h.CreateThing) thingRoutes.POST("", h.CreateThing)

View file

@ -164,7 +164,7 @@ func validateUserAndThing(c *gin.Context, h *Webhook) (*tModel.Thing, bool) {
func Webhooks(cfg *config.Config, w *Webhook, r *gin.Engine, auth *jwt.GinJWTMiddleware) { func Webhooks(cfg *config.Config, w *Webhook, r *gin.Engine, auth *jwt.GinJWTMiddleware) {
thingsAPI := r.Group("webhooks/things") thingsAPI := r.Group("eapi/v1/things")
thingsAPI.Use(utils.TimeoutMiddleware(cfg.Server.WriteTimeout)) thingsAPI.Use(utils.TimeoutMiddleware(cfg.Server.WriteTimeout))
{ {

View file

@ -586,7 +586,7 @@ func (h *Handler) updateUserPasswordLoggedInOnly(c *gin.Context) {
func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware, limiter *limiter.Limiter) { func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware, limiter *limiter.Limiter) {
userRoutes := router.Group("users") userRoutes := router.Group("api/v1/users")
userRoutes.Use(auth.MiddlewareFunc(), utils.RateLimitMiddleware(limiter)) userRoutes.Use(auth.MiddlewareFunc(), utils.RateLimitMiddleware(limiter))
{ {
userRoutes.GET("/", h.GetAllUsers()) userRoutes.GET("/", h.GetAllUsers())
@ -600,7 +600,7 @@ func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware, limiter
} }
authRoutes := router.Group("auth") authRoutes := router.Group("api/v1/auth")
authRoutes.Use(utils.RateLimitMiddleware(limiter)) authRoutes.Use(utils.RateLimitMiddleware(limiter))
{ {
authRoutes.POST("/:provider/callback", h.thirdPartyAuthCallback) authRoutes.POST("/:provider/callback", h.thirdPartyAuthCallback)