원클릭으로
builderx-api-contexts
Guide to Context logic structure in builderx_api.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Guide to Context logic structure in builderx_api.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Phoenix Channel patterns in landing_page_backend — real-time collaboration, WebSocket topics, broadcasting, and channel structure.
Guide to Context module patterns in landing_page_backend — Ecto queries, dynamic query building, Ecto.Multi, and Outbox messaging.
Guide to Phoenix Controller structure in landing_page_backend using FallbackController, tuple responses, and permission plugs.
Patterns for creating Oban background workers in landing_page_backend — queue configuration, job arguments, retry strategies, and dynamic query processing.
Custom Plug middleware patterns in landing_page_backend — authentication (JWT/Passport), authorization, permission checking, and rate limiting.
Guidelines for creating Ecto Schemas in landing_page_backend, including binary UUID primary keys, virtual fields, custom json/1 function, and multiple changeset patterns.
| name | builderx_api-contexts |
| description | Guide to Context logic structure in builderx_api. |
| metadata | {"author":"Vũ Lưu","version":"2026.03.25","source":"Source code builderx_api"} |
Conventions and structure for Ecto Contexts in the builderx_api project.
| Topic | Description | Reference |
|---|---|---|
| Transactions and Outbox | Using Ecto.Multi for complex logic and logging Outbox messages | core-multi-outbox |
defmodule BuilderxApi.SomeContext do
alias BuilderxApi.Citus, as: Repo
alias BuilderxApi.{Tools, Outbox}
alias Ecto.Multi
def create_something(attrs \\ %{}) do
multi =
Multi.new()
|> Multi.run(:changeset, fn _, _ ->
# Generate changeset
{:ok, Something.changeset(%Something{}, attrs)}
end)
|> Multi.run(:insert, fn _, %{changeset: changeset} ->
# Handle insert
Repo.insert(changeset, returning: true)
end)
|> Multi.run(:changelog, fn _, %{changeset: changeset, insert: insert_res} ->
# Write outbox log
%{
queue: "sync_to_questdb",
args: %{
action: "something_changelog",
data: %{
id: Ecto.UUID.generate(),
action: "CREATE",
changes: changeset.changes,
record_id: insert_res.id,
site_id: insert_res.site_id,
}
}
}
|> Outbox.new()
end)
case Repo.transaction(multi) do
{:ok, res} -> {:ok, res.insert}
err -> {:error, err}
end
end
end