MishkaBlog.PostBookmark (Mishka Blog v0.0.1)

Copy Markdown View Source

Manages user bookmarks for blog posts.

This resource represents bookmarks that users create to save blog posts for later reading. Each bookmark links a user to a specific blog post, creating a personal reading list.

The resource provides a simple interface for users to manage their reading lists without requiring administrative privileges. The unique constraint on user_id and post_id ensures each user can only bookmark a specific post once.

This resource has no multitenancy of its own, so a bookmark may only name a post of the site it is made for — see MishkaCmsCore.Runtime.Resources.Validations.TenantIsolation. Database-level constraints ensure data integrity and provide efficient querying for a user's bookmarked posts with pagination support.

Summary

Functions

Validates that the keys in the provided input are valid for at least one action on the resource.

Same as input/1, except restricts the keys to values accepted by the action provided.

Types

t()

@type t() :: %MishkaBlog.PostBookmark{
  __lateral_join_source__: term(),
  __meta__: term(),
  __metadata__: term(),
  __order__: term(),
  aggregates: term(),
  calculations: term(),
  id: term(),
  inserted_at: term(),
  post: term(),
  post_id: term(),
  post_in_any_state: term(),
  updated_at: term(),
  user: term(),
  user_id: term()
}

Functions

default_short_name()

input(opts)

@spec input(values :: map() | Keyword.t()) :: map() | no_return()

Validates that the keys in the provided input are valid for at least one action on the resource.

Raises a KeyError error at compile time if not. This exists because generally a struct should only ever be created by Ash as a result of a successful action. You should not be creating records manually in code, e.g %MyResource{value: 1, value: 2}. Generally that is fine, but often with embedded resources it is nice to be able to validate the keys that are being provided, e.g

Resource
|> Ash.Changeset.for_create(:create, %{embedded: EmbeddedResource.input(foo: 1, bar: 2)})
|> Ash.create()

input(opts, action)

@spec input(values :: map() | Keyword.t(), action :: atom()) :: map() | no_return()

Same as input/1, except restricts the keys to values accepted by the action provided.

json_api_match_route(_, _)

primary_key_matches?(left, right)