Service Sequences as Code — menghasilkan kode layanan dari DSL komentar Go.

Logika layanan adalah serangkaian keputusan: model mana yang di-query, apa yang dijaga, kapan menolak, apa yang dikembalikan. Keputusan ini milik orang yang memahami bisnis — tapi terkubur dalam boilerplate, tersebar di berbagai layer, dan hilang saat rewrite.

SSaC menyimpan keputusan ini sebagai spesifikasi deklaratif. Anda mendeklarasikan apa yang terjadi dan dalam urutan apa. Tool menghasilkan implementasinya.

specs/service/*.go  →  ssac validate  →  ssac gen  →  artifacts/service/*.go

GitHub

Ide Inti

Setiap fungsi layanan adalah urutan langkah. Setiap langkah mengikuti kontrak biner: berhasil → baris berikutnya, gagal → return. Ini bukan abstraksi yang kami ciptakan — ini cara logika layanan sudah bekerja. SSaC membuatnya eksplisit.

10 tipe sequence tetap mencakup semua operasi layer layanan yang mengikuti kontrak ini. Yang tidak cocok, delegasikan ke call. Set ini tertutup secara desain.

Tanpa LLM, tanpa inferensi — codegen simbolik murni dari template. Spesifikasi adalah sumber kebenaran tunggal.

Contoh

// @sequence get
// @model Project.FindByID
// @param ProjectID request
// @result project Project

// @sequence guard nil project
// @message "project not found"

// @sequence post
// @model Session.Create
// @param ProjectID request
// @param Command request
// @result session Session

// @sequence response json
// @var session
func CreateSession(w http.ResponseWriter, r *http.Request) {}

Deklarasi 10 baris ini menghasilkan kode berikut:

func CreateSession(w http.ResponseWriter, r *http.Request) {
    projectID := r.FormValue("ProjectID")
    command := r.FormValue("Command")

    project, err := projectModel.FindByID(projectID)
    if err != nil {
        http.Error(w, "Project lookup failed", http.StatusInternalServerError)
        return
    }

    if project == nil {
        http.Error(w, "project not found", http.StatusNotFound)
        return
    }

    session, err := sessionModel.Create(projectID, command)
    if err != nil {
        http.Error(w, "Session creation failed", http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(map[string]interface{}{
        "session": session,
    })
}

Tipe Sequence (10)

TipePeran
authorizePemeriksaan izin (OPA, dll.)
getPencarian sumber daya
guard nilKeluar jika null
guard existsKeluar jika ada
postPembuatan sumber daya
putPembaruan sumber daya
deletePenghapusan sumber daya
passwordPerbandingan kata sandi
callPanggilan eksternal (@component / @func)
responseMengembalikan respons (json)

Fitur Codegen

/api/reservations:
  get:
    operationId: ListReservations
    x-pagination:
      style: offset
      defaultLimit: 20
      maxLimit: 100
    x-sort:
      allowed: [start_at, created_at]
      default: start_at
      direction: desc
    x-filter:
      allowed: [status, room_id]
    x-include:
      allowed: [room, user]

Lisensi

MIT — GitHub