...

Source file src/codeberg.org/tslocum/sriracha/internal/database/database_page.go

Documentation: codeberg.org/tslocum/sriracha/internal/database

     1  package database
     2  
     3  import (
     4  	"context"
     5  	"log"
     6  
     7  	. "codeberg.org/tslocum/sriracha/model"
     8  	"github.com/jackc/pgx/v5"
     9  )
    10  
    11  func (db *DB) AddPage(p *Page) {
    12  	_, err := db.conn.Exec(context.Background(), "INSERT INTO page VALUES (DEFAULT, $1, $2)",
    13  		p.Path,
    14  		p.Content,
    15  	)
    16  	if err != nil {
    17  		log.Fatalf("failed to insert page: %s", err)
    18  	}
    19  	err = db.conn.QueryRow(context.Background(), "SELECT id FROM page WHERE path = $1", p.Path).Scan(&p.ID)
    20  	if err != nil {
    21  		log.Fatalf("failed to select id of added page: %s", err)
    22  	} else if p.ID == 0 {
    23  		log.Fatal("failed to select id of added page")
    24  	}
    25  }
    26  
    27  func (db *DB) PageByID(id int) *Page {
    28  	p := &Page{}
    29  	err := scanPage(p, db.conn.QueryRow(context.Background(), "SELECT * FROM page WHERE id = $1", id))
    30  	if err == pgx.ErrNoRows {
    31  		return nil
    32  	} else if err != nil {
    33  		log.Fatalf("failed to select page: %s", err)
    34  	}
    35  	return p
    36  }
    37  
    38  func (db *DB) PageByPath(path string) *Page {
    39  	p := &Page{}
    40  	err := scanPage(p, db.conn.QueryRow(context.Background(), "SELECT * FROM page WHERE path = $1", path))
    41  	if err == pgx.ErrNoRows {
    42  		return nil
    43  	} else if err != nil {
    44  		log.Fatalf("failed to select page: %s", err)
    45  	}
    46  	return p
    47  }
    48  
    49  func (db *DB) AllPages() []*Page {
    50  	rows, err := db.conn.Query(context.Background(), "SELECT * FROM page ORDER BY path ASC")
    51  	if err != nil {
    52  		log.Fatalf("failed to select all pages: %s", err)
    53  	}
    54  	var pages []*Page
    55  	for rows.Next() {
    56  		p := &Page{}
    57  		err := scanPage(p, rows)
    58  		if err != nil {
    59  			log.Fatalf("failed to select all pages: %s", err)
    60  		}
    61  		pages = append(pages, p)
    62  	}
    63  	return pages
    64  }
    65  
    66  func (db *DB) UpdatePage(p *Page) {
    67  	if p.ID <= 0 {
    68  		log.Fatalf("invalid page ID %d", p.ID)
    69  	}
    70  	_, err := db.conn.Exec(context.Background(), "UPDATE page SET path = $1, content = $2 WHERE id = $3",
    71  		p.Path,
    72  		p.Content,
    73  		p.ID,
    74  	)
    75  	if err != nil {
    76  		log.Fatalf("failed to update page: %s", err)
    77  	}
    78  }
    79  
    80  func (db *DB) DeletePage(id int) {
    81  	if id == 0 {
    82  		return
    83  	}
    84  	_, err := db.conn.Exec(context.Background(), "DELETE FROM page WHERE id = $1", id)
    85  	if err != nil {
    86  		log.Fatalf("failed to delete page: %s", err)
    87  	}
    88  }
    89  
    90  func scanPage(p *Page, row pgx.Row) error {
    91  	return row.Scan(
    92  		&p.ID,
    93  		&p.Path,
    94  		&p.Content,
    95  	)
    96  }
    97  

View as plain text