diff --git a/api/openapi.yaml b/api/openapi.yaml index 4b375ba8f..0466e7320 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -525,7 +525,7 @@ paths: description: Show only results with these categories required: false in: query - schema: { $ref: "#/components/schemas/CategoryNameList" } + schema: { $ref: "#/components/schemas/CategorySlugList" } responses: default: { $ref: "#/components/responses/InternalServerError" } "404": { $ref: "#/components/responses/NotFound" } @@ -1925,7 +1925,7 @@ components: CategoryCommonProps: type: object - required: [name, sort] + required: [name, slug, description, colour, sort, admin, meta] properties: name: $ref: "#/components/schemas/CategoryName" @@ -1980,11 +1980,11 @@ components: description: A category's URL-safe slug. type: string - CategoryNameList: + CategorySlugList: description: A list of category names. type: array items: - $ref: "#/components/schemas/CategoryName" + $ref: "#/components/schemas/CategorySlug" CategoryAdditional: type: object diff --git a/app/resources/thread/repo.go b/app/resources/thread/repo.go index 16ca23d8b..3bf5850f8 100644 --- a/app/resources/thread/repo.go +++ b/app/resources/thread/repo.go @@ -119,7 +119,7 @@ func HasTags(ids []xid.ID) Query { func HasCategories(ids []string) Query { return func(q *ent.PostQuery) { - q.Where(ent_post.HasCategoryWith(ent_category.NameIn(ids...))) + q.Where(ent_post.HasCategoryWith(ent_category.SlugIn(ids...))) } } diff --git a/app/transports/openapi/bindings/categories.go b/app/transports/openapi/bindings/categories.go index 6d544b0e4..65cbc6151 100644 --- a/app/transports/openapi/bindings/categories.go +++ b/app/transports/openapi/bindings/categories.go @@ -69,9 +69,11 @@ func (c Categories) CategoryUpdateOrder(ctx context.Context, request openapi.Cat func (c Categories) CategoryUpdate(ctx context.Context, request openapi.CategoryUpdateRequestObject) (openapi.CategoryUpdateResponseObject, error) { cat, err := c.category_svc.Update(ctx, category.CategoryID(deserialiseID(request.CategoryId)), category_svc.Partial{ Name: opt.NewPtr(request.Body.Name), + Slug: opt.NewPtr(request.Body.Slug), Description: opt.NewPtr(request.Body.Description), Colour: opt.NewPtr(request.Body.Colour), Admin: opt.NewPtr(request.Body.Admin), + Meta: opt.NewPtr((*map[string]any)(request.Body.Meta)), }) if err != nil { return nil, fault.Wrap(err, fctx.With(ctx)) diff --git a/app/transports/openapi/bindings/utils.go b/app/transports/openapi/bindings/utils.go index 7bc354600..d45f327e4 100644 --- a/app/transports/openapi/bindings/utils.go +++ b/app/transports/openapi/bindings/utils.go @@ -106,23 +106,27 @@ func serialiseProfileReference(a profile.Profile) openapi.ProfileReference { func serialiseCategory(c *category.Category) openapi.Category { return openapi.Category{ Id: *openapi.IdentifierFrom(xid.ID(c.ID)), - Admin: &c.Admin, - Colour: &c.Colour, - Description: &c.Description, Name: c.Name, + Slug: c.Slug, + Colour: c.Colour, + Description: c.Description, PostCount: c.PostCount, + Admin: c.Admin, Sort: c.Sort, + Meta: c.Metadata, } } func serialiseCategoryReference(c *category.Category) openapi.CategoryReference { return openapi.CategoryReference{ Id: *openapi.IdentifierFrom(xid.ID(c.ID)), - Admin: &c.Admin, - Colour: &c.Colour, - Description: &c.Description, Name: c.Name, + Slug: c.Slug, + Admin: c.Admin, + Colour: c.Colour, + Description: c.Description, Sort: c.Sort, + Meta: (openapi.Metadata)(c.Metadata), } } diff --git a/internal/openapi/generated.go b/internal/openapi/generated.go index 19be378f8..69998e4cf 100644 --- a/internal/openapi/generated.go +++ b/internal/openapi/generated.go @@ -325,21 +325,21 @@ type AuthenticatorSelectionCriteria struct { // Category defines model for Category. type Category struct { - Admin *bool `json:"admin,omitempty"` - Colour *string `json:"colour,omitempty"` + Admin bool `json:"admin"` + Colour string `json:"colour"` // CreatedAt The time the resource was created. CreatedAt time.Time `json:"createdAt"` // DeletedAt The time the resource was soft-deleted. DeletedAt *time.Time `json:"deletedAt,omitempty"` - Description *string `json:"description,omitempty"` + Description string `json:"description"` // Id A unique identifier for this resource. Id Identifier `json:"id"` // Meta Arbitrary metadata for the resource. - Meta *Metadata `json:"meta,omitempty"` + Meta Metadata `json:"meta"` // Misc Arbitrary extra data stored with the resource. Misc *map[string]interface{} `json:"misc,omitempty"` @@ -349,8 +349,8 @@ type Category struct { PostCount int `json:"postCount"` // Slug A category's URL-safe slug. - Slug *CategorySlug `json:"slug,omitempty"` - Sort int `json:"sort"` + Slug CategorySlug `json:"slug"` + Sort int `json:"sort"` // UpdatedAt The time the resource was updated. UpdatedAt time.Time `json:"updatedAt"` @@ -363,19 +363,19 @@ type CategoryAdditional struct { // CategoryCommonProps defines model for CategoryCommonProps. type CategoryCommonProps struct { - Admin *bool `json:"admin,omitempty"` - Colour *string `json:"colour,omitempty"` - Description *string `json:"description,omitempty"` + Admin bool `json:"admin"` + Colour string `json:"colour"` + Description string `json:"description"` // Meta Arbitrary metadata for the resource. - Meta *Metadata `json:"meta,omitempty"` + Meta Metadata `json:"meta"` // Name A category's user-facing name. Name CategoryName `json:"name"` // Slug A category's URL-safe slug. - Slug *CategorySlug `json:"slug,omitempty"` - Sort int `json:"sort"` + Slug CategorySlug `json:"slug"` + Sort int `json:"sort"` } // CategoryIdentifierList defines model for CategoryIdentifierList. @@ -421,26 +421,23 @@ type CategoryMutableProps struct { // CategoryName A category's user-facing name. type CategoryName = string -// CategoryNameList A list of category names. -type CategoryNameList = []CategoryName - // CategoryReference defines model for CategoryReference. type CategoryReference struct { - Admin *bool `json:"admin,omitempty"` - Colour *string `json:"colour,omitempty"` + Admin bool `json:"admin"` + Colour string `json:"colour"` // CreatedAt The time the resource was created. CreatedAt time.Time `json:"createdAt"` // DeletedAt The time the resource was soft-deleted. DeletedAt *time.Time `json:"deletedAt,omitempty"` - Description *string `json:"description,omitempty"` + Description string `json:"description"` // Id A unique identifier for this resource. Id Identifier `json:"id"` // Meta Arbitrary metadata for the resource. - Meta *Metadata `json:"meta,omitempty"` + Meta Metadata `json:"meta"` // Misc Arbitrary extra data stored with the resource. Misc *map[string]interface{} `json:"misc,omitempty"` @@ -449,8 +446,8 @@ type CategoryReference struct { Name CategoryName `json:"name"` // Slug A category's URL-safe slug. - Slug *CategorySlug `json:"slug,omitempty"` - Sort int `json:"sort"` + Slug CategorySlug `json:"slug"` + Sort int `json:"sort"` // UpdatedAt The time the resource was updated. UpdatedAt time.Time `json:"updatedAt"` @@ -459,6 +456,9 @@ type CategoryReference struct { // CategorySlug A category's URL-safe slug. type CategorySlug = string +// CategorySlugList A list of category names. +type CategorySlugList = []CategorySlug + // Collection defines model for Collection. type Collection struct { // CreatedAt The time the resource was created. @@ -1375,7 +1375,7 @@ type ThreadListParams struct { Tags *TagListIDs `form:"tags,omitempty" json:"tags,omitempty"` // Categories Show only results with these categories - Categories *CategoryNameList `form:"categories,omitempty" json:"categories,omitempty"` + Categories *CategorySlugList `form:"categories,omitempty" json:"categories,omitempty"` } // AccountUpdateJSONRequestBody defines body for AccountUpdate for application/json ContentType. @@ -11607,144 +11607,144 @@ func (sh *strictHandler) GetVersion(ctx echo.Context) error { // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/web/src/api/openapi/schemas/categoryCommonProps.ts b/web/src/api/openapi/schemas/categoryCommonProps.ts index 6c15a2537..6107390b6 100644 --- a/web/src/api/openapi/schemas/categoryCommonProps.ts +++ b/web/src/api/openapi/schemas/categoryCommonProps.ts @@ -11,10 +11,10 @@ import type { Metadata } from "./metadata"; export interface CategoryCommonProps { name: CategoryName; - slug?: CategorySlug; - description?: string; - colour?: string; + slug: CategorySlug; + description: string; + colour: string; sort: number; - admin?: boolean; - meta?: Metadata; + admin: boolean; + meta: Metadata; } diff --git a/web/src/api/openapi/schemas/categoryNameList.ts b/web/src/api/openapi/schemas/categorySlugList.ts similarity index 67% rename from web/src/api/openapi/schemas/categoryNameList.ts rename to web/src/api/openapi/schemas/categorySlugList.ts index a43e56486..a9e1acdcb 100644 --- a/web/src/api/openapi/schemas/categoryNameList.ts +++ b/web/src/api/openapi/schemas/categorySlugList.ts @@ -5,9 +5,9 @@ * Storyden social API for building community driven platforms. * OpenAPI spec version: 1 */ -import type { CategoryName } from "./categoryName"; +import type { CategorySlug } from "./categorySlug"; /** * A list of category names. */ -export type CategoryNameList = CategoryName[]; +export type CategorySlugList = CategorySlug[]; diff --git a/web/src/api/openapi/schemas/index.ts b/web/src/api/openapi/schemas/index.ts index 2891b7069..56b4a86de 100644 --- a/web/src/api/openapi/schemas/index.ts +++ b/web/src/api/openapi/schemas/index.ts @@ -57,9 +57,9 @@ export * from "./categoryList"; export * from "./categoryListOKResponse"; export * from "./categoryMutableProps"; export * from "./categoryName"; -export * from "./categoryNameList"; export * from "./categoryReference"; export * from "./categorySlug"; +export * from "./categorySlugList"; export * from "./categoryUpdateBody"; export * from "./categoryUpdateOKResponse"; export * from "./categoryUpdateOrderBody"; diff --git a/web/src/api/openapi/schemas/threadListParams.ts b/web/src/api/openapi/schemas/threadListParams.ts index 4fbbbc11a..9a753f914 100644 --- a/web/src/api/openapi/schemas/threadListParams.ts +++ b/web/src/api/openapi/schemas/threadListParams.ts @@ -6,7 +6,7 @@ * OpenAPI spec version: 1 */ import type { AccountHandle } from "./accountHandle"; -import type { CategoryNameList } from "./categoryNameList"; +import type { CategorySlugList } from "./categorySlugList"; import type { TagListIDs } from "./tagListIDs"; export type ThreadListParams = { @@ -21,5 +21,5 @@ export type ThreadListParams = { /** * Show only results with these categories */ - categories?: CategoryNameList; + categories?: CategorySlugList; }; diff --git a/web/src/components/site/Navigation/Navpill/components/CategoryList.tsx b/web/src/components/site/Navigation/Navpill/components/CategoryList.tsx index 5e05b2eb7..db56ed7c6 100644 --- a/web/src/components/site/Navigation/Navpill/components/CategoryList.tsx +++ b/web/src/components/site/Navigation/Navpill/components/CategoryList.tsx @@ -9,7 +9,7 @@ import { Unready } from "src/components/site/Unready"; function CategoryListItem(props: Category) { const pathname = usePathname(); - const href = `/c/${props.name}`; + const href = `/c/${props.slug}`; const selected = href === pathname; return ( diff --git a/web/src/components/site/Navigation/Sidebar/components/CategoryList/CategoryListItem.tsx b/web/src/components/site/Navigation/Sidebar/components/CategoryList/CategoryListItem.tsx index f5230c7e3..a803b5eab 100644 --- a/web/src/components/site/Navigation/Sidebar/components/CategoryList/CategoryListItem.tsx +++ b/web/src/components/site/Navigation/Sidebar/components/CategoryList/CategoryListItem.tsx @@ -18,7 +18,7 @@ export function CategoryListItem(props: Category & { isAdmin: boolean }) { } = useSortable({ id: props.id }); const pathname = usePathname(); - const href = `/c/${props.name}`; + const href = `/c/${props.slug}`; const selected = href === pathname; const style = {