// Code generated by atomctl. DO NOT EDIT.

// Package v1 provides HTTP route definitions and registration
// for the quyun/v2 application.
package v1

import (
	"mime/multipart"
	"quyun/v2/app/http/v1/dto"
	"quyun/v2/app/middlewares"
	"quyun/v2/database/models"

	"github.com/gofiber/fiber/v3"
	log "github.com/sirupsen/logrus"
	_ "go.ipao.vip/atom"
	_ "go.ipao.vip/atom/contracts"
	. "go.ipao.vip/atom/fen"
)

// Routes implements the HttpRoute contract and provides route registration
// for all controllers in the v1 module.
//
// @provider contracts.HttpRoute atom.GroupRoutes
type Routes struct {
	log         *log.Entry `inject:"false"`
	middlewares *middlewares.Middlewares
	// Controller instances
	common      *Common
	content     *Content
	creator     *Creator
	storage     *Storage
	tenant      *Tenant
	transaction *Transaction
	user        *User
}

// Prepare initializes the routes provider with logging configuration.
func (r *Routes) Prepare() error {
	r.log = log.WithField("module", "routes.v1")
	r.log.Info("Initializing routes module")
	return nil
}

// Name returns the unique identifier for this routes provider.
func (r *Routes) Name() string {
	return "v1"
}

// Register registers all HTTP routes with the provided fiber router.
// Each route is registered with its corresponding controller action and parameter bindings.
func (r *Routes) Register(router fiber.Router) {
	// Register routes for controller: Common
	r.log.Debugf("Registering route: Get /v1/common/options -> common.GetOptions")
	router.Get("/v1/common/options"[len(r.Path()):], DataFunc0(
		r.common.GetOptions,
	))
	r.log.Debugf("Registering route: Get /v1/upload/check -> common.CheckHash")
	router.Get("/v1/upload/check"[len(r.Path()):], DataFunc2(
		r.common.CheckHash,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("hash"),
	))
	r.log.Debugf("Registering route: Post /v1/upload/init -> common.InitUpload")
	router.Post("/v1/upload/init"[len(r.Path()):], DataFunc2(
		r.common.InitUpload,
		Local[*models.User]("__ctx_user"),
		Body[dto.UploadInitForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/upload/part -> common.UploadPart")
	router.Post("/v1/upload/part"[len(r.Path()):], Func3(
		r.common.UploadPart,
		Local[*models.User]("__ctx_user"),
		File[multipart.FileHeader]("file"),
		Body[dto.UploadPartForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/upload/complete -> common.CompleteUpload")
	router.Post("/v1/upload/complete"[len(r.Path()):], DataFunc2(
		r.common.CompleteUpload,
		Local[*models.User]("__ctx_user"),
		Body[dto.UploadCompleteForm]("form"),
	))
	r.log.Debugf("Registering route: Delete /v1/upload/:uploadId -> common.AbortUpload")
	router.Delete("/v1/upload/:uploadId"[len(r.Path()):], Func2(
		r.common.AbortUpload,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("uploadId"),
	))
	r.log.Debugf("Registering route: Delete /v1/media-assets/:id -> common.DeleteMediaAsset")
	router.Delete("/v1/media-assets/:id"[len(r.Path()):], Func2(
		r.common.DeleteMediaAsset,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Post /v1/upload -> common.Upload")
	router.Post("/v1/upload"[len(r.Path()):], DataFunc3(
		r.common.Upload,
		Local[*models.User]("__ctx_user"),
		File[multipart.FileHeader]("file"),
		Body[dto.UploadForm]("form"),
	))
	// Register routes for controller: Content
	r.log.Debugf("Registering route: Get /v1/contents -> content.List")
	router.Get("/v1/contents"[len(r.Path()):], DataFunc1(
		r.content.List,
		Query[dto.ContentListFilter]("filter"),
	))
	r.log.Debugf("Registering route: Get /v1/contents/:id -> content.Get")
	router.Get("/v1/contents/:id"[len(r.Path()):], DataFunc1(
		r.content.Get,
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Get /v1/contents/:id/comments -> content.ListComments")
	router.Get("/v1/contents/:id/comments"[len(r.Path()):], DataFunc2(
		r.content.ListComments,
		PathParam[string]("id"),
		QueryParam[int]("page"),
	))
	r.log.Debugf("Registering route: Get /v1/topics -> content.ListTopics")
	router.Get("/v1/topics"[len(r.Path()):], DataFunc0(
		r.content.ListTopics,
	))
	r.log.Debugf("Registering route: Post /v1/comments/:id/like -> content.LikeComment")
	router.Post("/v1/comments/:id/like"[len(r.Path()):], Func1(
		r.content.LikeComment,
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Post /v1/contents/:id/comments -> content.CreateComment")
	router.Post("/v1/contents/:id/comments"[len(r.Path()):], Func2(
		r.content.CreateComment,
		PathParam[string]("id"),
		Body[dto.CommentCreateForm]("form"),
	))
	// Register routes for controller: Creator
	r.log.Debugf("Registering route: Delete /v1/creator/contents/:id -> creator.DeleteContent")
	router.Delete("/v1/creator/contents/:id"[len(r.Path()):], Func2(
		r.creator.DeleteContent,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Delete /v1/creator/payout-accounts -> creator.RemovePayoutAccount")
	router.Delete("/v1/creator/payout-accounts"[len(r.Path()):], Func2(
		r.creator.RemovePayoutAccount,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("id"),
	))
	r.log.Debugf("Registering route: Get /v1/creator/contents -> creator.ListContents")
	router.Get("/v1/creator/contents"[len(r.Path()):], DataFunc2(
		r.creator.ListContents,
		Local[*models.User]("__ctx_user"),
		Query[dto.CreatorContentListFilter]("filter"),
	))
	r.log.Debugf("Registering route: Get /v1/creator/contents/:id -> creator.GetContent")
	router.Get("/v1/creator/contents/:id"[len(r.Path()):], DataFunc2(
		r.creator.GetContent,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Get /v1/creator/dashboard -> creator.Dashboard")
	router.Get("/v1/creator/dashboard"[len(r.Path()):], DataFunc1(
		r.creator.Dashboard,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/creator/orders -> creator.ListOrders")
	router.Get("/v1/creator/orders"[len(r.Path()):], DataFunc2(
		r.creator.ListOrders,
		Local[*models.User]("__ctx_user"),
		Query[dto.CreatorOrderListFilter]("filter"),
	))
	r.log.Debugf("Registering route: Get /v1/creator/payout-accounts -> creator.ListPayoutAccounts")
	router.Get("/v1/creator/payout-accounts"[len(r.Path()):], DataFunc1(
		r.creator.ListPayoutAccounts,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/creator/settings -> creator.GetSettings")
	router.Get("/v1/creator/settings"[len(r.Path()):], DataFunc1(
		r.creator.GetSettings,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Post /v1/creator/apply -> creator.Apply")
	router.Post("/v1/creator/apply"[len(r.Path()):], Func2(
		r.creator.Apply,
		Local[*models.User]("__ctx_user"),
		Body[dto.ApplyForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/creator/contents -> creator.CreateContent")
	router.Post("/v1/creator/contents"[len(r.Path()):], Func2(
		r.creator.CreateContent,
		Local[*models.User]("__ctx_user"),
		Body[dto.ContentCreateForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/creator/orders/:id/refund -> creator.Refund")
	router.Post("/v1/creator/orders/:id/refund"[len(r.Path()):], Func3(
		r.creator.Refund,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
		Body[dto.RefundForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/creator/payout-accounts -> creator.AddPayoutAccount")
	router.Post("/v1/creator/payout-accounts"[len(r.Path()):], Func2(
		r.creator.AddPayoutAccount,
		Local[*models.User]("__ctx_user"),
		Body[dto.PayoutAccount]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/creator/withdraw -> creator.Withdraw")
	router.Post("/v1/creator/withdraw"[len(r.Path()):], Func2(
		r.creator.Withdraw,
		Local[*models.User]("__ctx_user"),
		Body[dto.WithdrawForm]("form"),
	))
	r.log.Debugf("Registering route: Put /v1/creator/contents/:id -> creator.UpdateContent")
	router.Put("/v1/creator/contents/:id"[len(r.Path()):], Func3(
		r.creator.UpdateContent,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
		Body[dto.ContentUpdateForm]("form"),
	))
	r.log.Debugf("Registering route: Put /v1/creator/settings -> creator.UpdateSettings")
	router.Put("/v1/creator/settings"[len(r.Path()):], Func2(
		r.creator.UpdateSettings,
		Local[*models.User]("__ctx_user"),
		Body[dto.Settings]("form"),
	))
	// Register routes for controller: Storage
	r.log.Debugf("Registering route: Get /v1/storage/:key -> storage.Download")
	router.Get("/v1/storage/:key"[len(r.Path()):], Func3(
		r.storage.Download,
		PathParam[string]("key"),
		QueryParam[string]("expires"),
		QueryParam[string]("sign"),
	))
	r.log.Debugf("Registering route: Put /v1/storage/:key -> storage.Upload")
	router.Put("/v1/storage/:key"[len(r.Path()):], DataFunc3(
		r.storage.Upload,
		PathParam[string]("key"),
		QueryParam[string]("expires"),
		QueryParam[string]("sign"),
	))
	// Register routes for controller: Tenant
	r.log.Debugf("Registering route: Delete /v1/tenants/:id/follow -> tenant.Unfollow")
	router.Delete("/v1/tenants/:id/follow"[len(r.Path()):], Func2(
		r.tenant.Unfollow,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Get /v1/tenants/:id -> tenant.Get")
	router.Get("/v1/tenants/:id"[len(r.Path()):], DataFunc2(
		r.tenant.Get,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Post /v1/tenants/:id/follow -> tenant.Follow")
	router.Post("/v1/tenants/:id/follow"[len(r.Path()):], Func2(
		r.tenant.Follow,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	// Register routes for controller: Transaction
	r.log.Debugf("Registering route: Get /v1/orders/:id/status -> transaction.Status")
	router.Get("/v1/orders/:id/status"[len(r.Path()):], DataFunc1(
		r.transaction.Status,
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Post /v1/orders -> transaction.Create")
	router.Post("/v1/orders"[len(r.Path()):], DataFunc2(
		r.transaction.Create,
		Local[*models.User]("__ctx_user"),
		Body[dto.OrderCreateForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/orders/:id/pay -> transaction.Pay")
	router.Post("/v1/orders/:id/pay"[len(r.Path()):], DataFunc3(
		r.transaction.Pay,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
		Body[dto.OrderPayForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/webhook/payment/notify -> transaction.Webhook")
	router.Post("/v1/webhook/payment/notify"[len(r.Path()):], DataFunc1(
		r.transaction.Webhook,
		Body[WebhookForm]("form"),
	))
	// Register routes for controller: User
	r.log.Debugf("Registering route: Delete /v1/me/favorites/:contentId -> user.RemoveFavorite")
	router.Delete("/v1/me/favorites/:contentId"[len(r.Path()):], Func2(
		r.user.RemoveFavorite,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("contentId"),
	))
	r.log.Debugf("Registering route: Delete /v1/me/likes/:contentId -> user.RemoveLike")
	router.Delete("/v1/me/likes/:contentId"[len(r.Path()):], Func2(
		r.user.RemoveLike,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("contentId"),
	))
	r.log.Debugf("Registering route: Get /v1/me -> user.Me")
	router.Get("/v1/me"[len(r.Path()):], DataFunc1(
		r.user.Me,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/me/coupons -> user.MyCoupons")
	router.Get("/v1/me/coupons"[len(r.Path()):], DataFunc2(
		r.user.MyCoupons,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("status"),
	))
	r.log.Debugf("Registering route: Get /v1/me/favorites -> user.Favorites")
	router.Get("/v1/me/favorites"[len(r.Path()):], DataFunc1(
		r.user.Favorites,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/me/following -> user.Following")
	router.Get("/v1/me/following"[len(r.Path()):], DataFunc1(
		r.user.Following,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/me/library -> user.Library")
	router.Get("/v1/me/library"[len(r.Path()):], DataFunc1(
		r.user.Library,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/me/likes -> user.Likes")
	router.Get("/v1/me/likes"[len(r.Path()):], DataFunc1(
		r.user.Likes,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Get /v1/me/notifications -> user.Notifications")
	router.Get("/v1/me/notifications"[len(r.Path()):], DataFunc3(
		r.user.Notifications,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("type"),
		QueryParam[int]("page"),
	))
	r.log.Debugf("Registering route: Get /v1/me/orders -> user.ListOrders")
	router.Get("/v1/me/orders"[len(r.Path()):], DataFunc2(
		r.user.ListOrders,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("status"),
	))
	r.log.Debugf("Registering route: Get /v1/me/orders/:id -> user.GetOrder")
	router.Get("/v1/me/orders/:id"[len(r.Path()):], DataFunc2(
		r.user.GetOrder,
		Local[*models.User]("__ctx_user"),
		PathParam[string]("id"),
	))
	r.log.Debugf("Registering route: Get /v1/me/wallet -> user.Wallet")
	router.Get("/v1/me/wallet"[len(r.Path()):], DataFunc1(
		r.user.Wallet,
		Local[*models.User]("__ctx_user"),
	))
	r.log.Debugf("Registering route: Post /v1/me/favorites -> user.AddFavorite")
	router.Post("/v1/me/favorites"[len(r.Path()):], Func2(
		r.user.AddFavorite,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("contentId"),
	))
	r.log.Debugf("Registering route: Post /v1/me/likes -> user.AddLike")
	router.Post("/v1/me/likes"[len(r.Path()):], Func2(
		r.user.AddLike,
		Local[*models.User]("__ctx_user"),
		QueryParam[string]("contentId"),
	))
	r.log.Debugf("Registering route: Post /v1/me/realname -> user.RealName")
	router.Post("/v1/me/realname"[len(r.Path()):], Func2(
		r.user.RealName,
		Local[*models.User]("__ctx_user"),
		Body[dto.RealNameForm]("form"),
	))
	r.log.Debugf("Registering route: Post /v1/me/wallet/recharge -> user.Recharge")
	router.Post("/v1/me/wallet/recharge"[len(r.Path()):], DataFunc2(
		r.user.Recharge,
		Local[*models.User]("__ctx_user"),
		Body[dto.RechargeForm]("form"),
	))
	r.log.Debugf("Registering route: Put /v1/me -> user.Update")
	router.Put("/v1/me"[len(r.Path()):], Func2(
		r.user.Update,
		Local[*models.User]("__ctx_user"),
		Body[dto.UserUpdate]("form"),
	))

	r.log.Info("Successfully registered all routes")
}
