build backend to collect and search using embeddings

This commit is contained in:
2025-01-04 00:15:29 -07:00
parent c4521af5c2
commit 3be1648ee4
16 changed files with 679 additions and 489 deletions

73
backend/Leg/utah.go Normal file
View File

@ -0,0 +1,73 @@
package Leg
import (
"encoding/json"
"fmt"
"os"
"time"
"git.sa.vin/legislature-tracker/backend/cachedAPI"
"git.sa.vin/legislature-tracker/backend/types"
)
type UtahLeg interface {
GetBillList(year, session string) (types.UtahBillList, error)
GetBillDetails(year, session, billID string) (types.UtahBill, error)
}
type utahLeg struct {
cache cachedAPI.CachedAPI
}
var developerToken string
func NewUtahLeg(cache cachedAPI.CachedAPI) UtahLeg {
developerToken = os.Getenv("UTAH_DEV_TOKEN")
return &utahLeg{
cache: cache,
}
}
// GetBillList gets the list of bills for a given year and session,
// session should be one of "GS", "S#" where # is the session number
func (u utahLeg) GetBillList(year, session string) (types.UtahBillList, error) {
// if session is not GS it must start with S and end with a number
if session != "GS" && (session[0] != 'S' || session[1] < '0' || session[1] > '9') {
return types.UtahBillList{}, fmt.Errorf("session must be one of GS or S with some number")
}
respString, err := u.cache.Get(fmt.Sprintf("https://glen.le.utah.gov/bills/%v%v/billlist/%v", year, session, developerToken), time.Hour)
if err != nil {
return types.UtahBillList{}, fmt.Errorf("error getting bill list: %w", err)
}
if respString == "Invalid request" {
return types.UtahBillList{}, fmt.Errorf("invalid request")
}
var billList types.UtahBillList
err = json.Unmarshal([]byte(respString), &billList)
if err != nil {
return types.UtahBillList{}, fmt.Errorf("error unmarshalling bill list: %w", err)
}
return billList, nil
}
// GetBillDetails gets the details of a bill for a given year, session, and billID
// session should be one of "GS", "S2"
func (u utahLeg) GetBillDetails(year, session, billID string) (types.UtahBill, error) {
// if session is not GS it must start with S and end with a number
if session != "GS" && (session[0] != 'S' || session[1] < '0' || session[1] > '9') {
return types.UtahBill{}, fmt.Errorf("session must be one of GS or S with some number")
}
respString, err := u.cache.Get(fmt.Sprintf("https://glen.le.utah.gov/bills/%v%v/%v/%v", year, session, billID, developerToken), time.Hour)
if err != nil {
return types.UtahBill{}, fmt.Errorf("error getting bill details: %w", err)
}
if respString == "Invalid request" {
return types.UtahBill{}, fmt.Errorf("invalid request")
}
var bill types.UtahBill
err = json.Unmarshal([]byte(respString), &bill)
if err != nil {
return types.UtahBill{}, fmt.Errorf("error unmarshalling bill details: %w", err)
}
return bill, nil
}