NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Stavy, priority, pravidlá oprávnení, notifikácie, pravidlá priraďovania a termínov — dokonca aj modely — vymeníte bez forku. Kontrakty viazané cez konfiguráciu sa dajú naviazať aj priamo v kontajneri:

KontraktMetódyPredvolené / väzba z
TicketStatecategory(): StatusCategoryEnums\TicketStatus
TicketLifecycleautomation(Automation $hook): ?stringLifecycle\TicketLifecycle (tickets.lifecycle)
Priorityweight(): intEnums\TicketPriority (tickets.priority.enum)
AssigneeticketAssigneeName(), ticketNotifiables(): iterable, isEligibleTicketAssignee(Ticket)predvolené z Concerns\IsTicketAssignee
TicketProjectticketReferencePrefix(): stringváš model projektu
AssignmentStrategyassigneeFor(Ticket): ?ModelAssignment\CategoryDefaultStrategy (tickets.assignment.strategy)
DueDateResolverdueAt(Ticket): ?CarbonImmutableDue\CategoryDueDateResolver (tickets.due.resolver)
GuestLinkGeneratorfor(Ticket, Model $recipient): stringGuests\SignedRouteLinkGenerator (tickets.guests.link_generator)
AgentScopeallows(Model $agent, Ticket), constrain(Builder, Model $agent)Authorization\UnrestrictedAgentScope (tickets.authorization.agent_scope)
ConversationLocklock, unlock, isLockedConversation\CommentsConversationLock
TicketEventticket(): Ticket, actor(): ?Modelimplementuje ho každá udalosť tiketu (pozrite Udalosti)

Pri založení každý kontrakt vidí uložený tiket: riešiteľ (kontrola vhodnosti cez isEligibleTicketAssignee() → AgentScope::allows(), alebo AssignmentStrategy::assigneeFor()) aj termín (DueDateResolver::dueAt()) sa vyberú hneď po vložení riadku, v tej istej transakcii — s kľúčom, číslom tiketu, poradovým číslom, počiatočným stavom, žiadateľom, projektom, kategóriou (načítanou), prioritou a kanálom, ešte však bez hodnôt vlastných polí, štítkov, sledujúcich, príloh, riešiteľa a termínu. allows(), ktoré sa pýta databázy podľa kľúča, funguje.

Dodané implementácie

TriedaImplementujeSprávanie
Assignment\CategoryDefaultStrategyAssignmentStrategydefault_assignee kategórie tiketu alebo jej najbližšieho predka, ktorý ho nastavuje.
Due\CategoryDueDateResolverDueDateResolverTeraz plus default_due_in kategórie tiketu alebo jej najbližšieho predka, ktorý ho nastavuje.
Guests\SignedRouteLinkGeneratorGuestLinkGeneratorDočasná podpísaná URL routy tickets.guest.show; potrebuje routy pre hostí, inak InvalidTicketsConfigurationException.
Authorization\UnrestrictedAgentScopeAgentScopeKaždý agent pracuje na každom tikete.
Conversation\CommentsConversationLockConversationLockComments::lock() / unlock() na vlákne tiketu, idempotentné oboma smermi (naviazané cez $app->bind(), na nahradenie ho naviažte znova).
Lifecycle\TicketLifecycleTicketLifecycleDodaný životný cyklus (pozrite Stavy a prechody).
Policies\TicketPolicy—Policy API (pozrite Policy a rozsah agentov).

Tam, kde má podtrieda zmysel, nie sú final (TicketLifecycle, TicketPolicy, triedy notifikácií); inak kontrakt implementujte sami.

Ďalšie miesta na výmenu

  • Životný cyklus — tickets.lifecycle (pozrite Stavy a prechody).
  • Škála priorít — tickets.priority.enum (pozrite Kategórie a priority).
  • Modely — tickets.models.* s podtriedami modelov z balíka (pozrite Modely, kľúče a čísla tiketov).
  • Policy — tickets.authorization.policy s podtriedou TicketPolicy (pozrite Policy a rozsah agentov).
  • Každá notifikácia — tickets.notifications.types.<type> s podtriedou, alebo false na vypnutie (pozrite Notifikácie).
  • Akcie — naviažte vlastnú implementáciu v kontajneri; každá cesta cez fasádu si akcie berie z neho.

Verejné pomocné triedy

TriedaMetódyPoužitie
Support\TicketModelsticket(), category(), field(), tag(), guest()Miesto pre modely — nakonfigurovaná trieda z tickets.models.*. V kóde, ktorý musí nasledovať výmenu modelu, sa pýtajte cez ňu (TicketModels::ticket()::query()).
Support\Optionalnew Optional, static given(mixed $value): boolZnačka nezadanej hodnoty v DTO Update*Data, aby null mohlo znamenať zrušenie.
Support\TicketsConfiglifecycle(), priorityEnum(), referencePrefix(), channels(), autoCloseAfter(), notificationUrl($reference), routesEnabled(), …Prečíta nastavenie tickets.* presne ako balík — nezmyselná hodnota vyhodí výnimku s názvom kľúča.
Fields\FieldSetResolverforTicket(Ticket), forScope(…), attributeDefinitions(Ticket), knownKeys(Ticket), flush()Platná sada polí, zapamätaná pre (projekt, kategória); scoped väzba (na požiadavku / job, bezpečná pre Octane) — získajte ju z kontajnera, nikdy ju nevytvárajte cez new.
Notifications\RecipientResolvercreated(), assigned(), replied(), noteAdded(), mentioned(), statusChanged(), due(), merged(), replyType(AuthorRole)Komu ktorá notifikácia ide, už s kontrolou viditeľnosti, bez duplicít a prefiltrované — použite ho na rozposlanie zmeny tiketu vlastným kanálom.

Všetko ostatné pod Support\, Http\, Listeners\ a Actions\Internal\ je interné.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.