Issue

com.worxbend.codeberg4s.issues.Issue
final case class Issue

An issue on a Codeberg or Forgejo instance.

Curated, not generated (ADR-0001), and owned by this group per docs/LEDGER.md. Three of Forgejo's twenty-five Issue keys are deliberately absent from this model and kept only on com.worxbend.codeberg4s.issues.wire.IssueDto: assignee duplicates the first element of assignees, original_author_id is the foreign forge's row id and means nothing here, and pin_order describes a repository's pinned-issue ordering rather than the issue.

==A listing of issues contains pull requests==

GET /repos/{owner}/{repo}/issues returns both. golden/issue/list-labelled.json is a capture of that endpoint on forgejo/forgejo and every element in it is a pull request, html_url and all. isPullRequest is how a caller tells them apart, and it is the only pull-request concept this model carries โ€” the pull_request payload itself (draft, merged, merged_at) belongs to the pull-request wave and is not modelled here.

==Nullability==

docs/HAZARDS.md ยง1 measured this model specifically: assignee, assignees, closed_at, due_date and milestone all arrive as JSON null on the very first issue of the very first page. Absent and null are the same thing to the decoder, a null array becomes an empty Vector, and closed_at is folded into state rather than surviving as a field of its own.

Value parameters

assignees

everyone assigned, empty when the issue is unassigned โ€” Forgejo sends null, not [], in that case

author

the account that opened the issue, absent for content imported from another forge

commentCount

how many comments the issue has, as the instance counts them; 0 when it did not say

dueDate

the deadline set on the issue, absent when it has none

id

the instance-wide row identifier. Almost never what a caller wants: no endpoint accepts it, and every URL uses number

isPullRequest

whether this "issue" is really a pull request โ€” see above

number

the per-repository index every endpoint and every human uses; see IssueNumber

originalAuthor

the display name an import recorded, absent for an issue opened on this instance

ref

the Git reference the issue was filed against, absent for the usual case of none

repository

which repository the issue belongs to, from Forgejo's reduced repository object. Worth reading on a cross-repository listing such as GET /repos/issues/search, where the issues come from everywhere

state

open, or closed together with when; see LifecycleState for why closed_at is not a separate field

Attributes

Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Members list

Value members

Inherited methods

def productElementNames: Iterator[String]

An iterator over the names of all the elements of this product.

An iterator over the names of all the elements of this product.

Attributes

Inherited from:
Product
def productIterator: Iterator[Any]

An iterator over all the elements of this product.

An iterator over all the elements of this product.

Attributes

Returns

in the default implementation, an Iterator[Any]

Inherited from:
Product