slug and shortId conversion functions
This commit is contained in:
		
							parent
							
								
									5c8817aa2a
								
							
						
					
					
						commit
						adaf6cf87d
					
				@ -2,73 +2,68 @@ package models
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"database/sql"
 | 
						"database/sql"
 | 
				
			||||||
	"strconv"
 | 
					 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Guestbook struct {
 | 
					type Guestbook struct {
 | 
				
			||||||
    ID int64
 | 
						ID        int64
 | 
				
			||||||
    ShortId uint64
 | 
						ShortId   uint64
 | 
				
			||||||
    SiteUrl string
 | 
						SiteUrl   string
 | 
				
			||||||
    UserId int64
 | 
						UserId    int64
 | 
				
			||||||
    Created time.Time
 | 
						Created   time.Time
 | 
				
			||||||
    IsDeleted bool
 | 
						IsDeleted bool
 | 
				
			||||||
    IsActive bool
 | 
						IsActive  bool
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (gb Guestbook) Slug() string {
 | 
					 | 
				
			||||||
    return strconv.FormatUint(gb.ShortId, 36)
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type GuestbookModel struct {
 | 
					type GuestbookModel struct {
 | 
				
			||||||
    DB *sql.DB
 | 
						DB *sql.DB
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *GuestbookModel) Insert(shortId uint64, siteUrl string, userId int64) (int64, error) {
 | 
					func (m *GuestbookModel) Insert(shortId uint64, siteUrl string, userId int64) (int64, error) {
 | 
				
			||||||
    stmt := `INSERT INTO guestbooks (ShortId, SiteUrl, UserId, Created, IsDeleted, IsActive)
 | 
						stmt := `INSERT INTO guestbooks (ShortId, SiteUrl, UserId, Created, IsDeleted, IsActive)
 | 
				
			||||||
    VALUES(?, ?, ?, ?, FALSE, TRUE)`
 | 
					    VALUES(?, ?, ?, ?, FALSE, TRUE)`
 | 
				
			||||||
    result, err := m.DB.Exec(stmt, shortId, siteUrl, userId, time.Now().UTC())
 | 
						result, err := m.DB.Exec(stmt, shortId, siteUrl, userId, time.Now().UTC())
 | 
				
			||||||
    if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
        return -1, err
 | 
							return -1, err
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
    id, err := result.LastInsertId()
 | 
						id, err := result.LastInsertId()
 | 
				
			||||||
    if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
        return -1, err
 | 
							return -1, err
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
    return id, nil
 | 
						return id, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *GuestbookModel) Get(shortId uint64) (Guestbook, error) {
 | 
					func (m *GuestbookModel) Get(shortId uint64) (Guestbook, error) {
 | 
				
			||||||
    stmt := `SELECT Id, ShortId, SiteUrl, UserId, Created, IsDeleted, IsActive FROM guestbooks
 | 
						stmt := `SELECT Id, ShortId, SiteUrl, UserId, Created, IsDeleted, IsActive FROM guestbooks
 | 
				
			||||||
    WHERE ShortId = ?`
 | 
					    WHERE ShortId = ?`
 | 
				
			||||||
    row := m.DB.QueryRow(stmt, shortId)
 | 
						row := m.DB.QueryRow(stmt, shortId)
 | 
				
			||||||
    var g Guestbook
 | 
						var g Guestbook
 | 
				
			||||||
    err := row.Scan(&g.ID, &g.ShortId, &g.SiteUrl, &g.UserId, &g.Created, &g.IsDeleted, &g.IsActive)
 | 
						err := row.Scan(&g.ID, &g.ShortId, &g.SiteUrl, &g.UserId, &g.Created, &g.IsDeleted, &g.IsActive)
 | 
				
			||||||
    if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
        return Guestbook{}, err
 | 
							return Guestbook{}, err
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return g, nil
 | 
						return g, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *GuestbookModel) GetAll(userId int64) ([]Guestbook, error) {
 | 
					func (m *GuestbookModel) GetAll(userId int64) ([]Guestbook, error) {
 | 
				
			||||||
    stmt := `SELECT Id, ShortId, SiteUrl, UserId, Created, IsDeleted, IsActive FROM guestbooks
 | 
						stmt := `SELECT Id, ShortId, SiteUrl, UserId, Created, IsDeleted, IsActive FROM guestbooks
 | 
				
			||||||
    WHERE UserId = ?`
 | 
					    WHERE UserId = ?`
 | 
				
			||||||
    rows, err := m.DB.Query(stmt, userId)
 | 
						rows, err := m.DB.Query(stmt, userId)
 | 
				
			||||||
    if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
        return nil, err
 | 
							return nil, err
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
    var guestbooks []Guestbook
 | 
						var guestbooks []Guestbook
 | 
				
			||||||
    for rows.Next() {
 | 
						for rows.Next() {
 | 
				
			||||||
        var g Guestbook
 | 
							var g Guestbook
 | 
				
			||||||
        err = rows.Scan(&g.ID, &g.ShortId, &g.SiteUrl, &g.UserId, &g.Created, &g.IsDeleted, &g.IsActive)
 | 
							err = rows.Scan(&g.ID, &g.ShortId, &g.SiteUrl, &g.UserId, &g.Created, &g.IsDeleted, &g.IsActive)
 | 
				
			||||||
        if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
            return nil, err
 | 
								return nil, err
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
        guestbooks = append(guestbooks, g)
 | 
							guestbooks = append(guestbooks, g)
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
    if err = rows.Err(); err != nil {
 | 
						if err = rows.Err(); err != nil {
 | 
				
			||||||
        return nil, err
 | 
							return nil, err
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
    return guestbooks, nil
 | 
						return guestbooks, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,10 @@ type CommonData struct {
 | 
				
			|||||||
    IsHtmx bool
 | 
					    IsHtmx bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func shortIdToSlug(shortId uint64) string {
 | 
				
			||||||
 | 
					    return strconv.FormatUint(shortId, 36)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func slugToShortId(slug string) uint64 {
 | 
					func slugToShortId(slug string) uint64 {
 | 
				
			||||||
    id, _ := strconv.ParseUint(slug, 36, 64)
 | 
					    id, _ := strconv.ParseUint(slug, 36, 64)
 | 
				
			||||||
    return id
 | 
					    return id
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,10 @@ type CommonData struct {
 | 
				
			|||||||
	IsHtmx          bool
 | 
						IsHtmx          bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func shortIdToSlug(shortId uint64) string {
 | 
				
			||||||
 | 
						return strconv.FormatUint(shortId, 36)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func slugToShortId(slug string) uint64 {
 | 
					func slugToShortId(slug string) uint64 {
 | 
				
			||||||
	id, _ := strconv.ParseUint(slug, 36, 64)
 | 
						id, _ := strconv.ParseUint(slug, 36, 64)
 | 
				
			||||||
	return id
 | 
						return id
 | 
				
			||||||
@ -87,7 +91,7 @@ func topNav(data CommonData) templ.Component {
 | 
				
			|||||||
			var templ_7745c5c3_Var3 string
 | 
								var templ_7745c5c3_Var3 string
 | 
				
			||||||
			templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(data.CurrentUser.Username)
 | 
								templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(data.CurrentUser.Username)
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 36, Col: 52}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 40, Col: 52}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
 | 
								_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
@ -100,7 +104,7 @@ func topNav(data CommonData) templ.Component {
 | 
				
			|||||||
			var templ_7745c5c3_Var4 string
 | 
								var templ_7745c5c3_Var4 string
 | 
				
			||||||
			templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken)
 | 
								templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken)
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 39, Col: 81}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 43, Col: 81}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
 | 
								_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
@ -181,7 +185,7 @@ func base(title string, data CommonData) templ.Component {
 | 
				
			|||||||
		var templ_7745c5c3_Var7 string
 | 
							var templ_7745c5c3_Var7 string
 | 
				
			||||||
		templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(title)
 | 
							templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(title)
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 62, Col: 26}
 | 
								return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 66, Col: 26}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
 | 
							_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
@ -211,7 +215,7 @@ func base(title string, data CommonData) templ.Component {
 | 
				
			|||||||
			var templ_7745c5c3_Var8 string
 | 
								var templ_7745c5c3_Var8 string
 | 
				
			||||||
			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Flash)
 | 
								templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Flash)
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 73, Col: 51}
 | 
									return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 77, Col: 51}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
 | 
								_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
 | 
				
			||||||
			if templ_7745c5c3_Err != nil {
 | 
								if templ_7745c5c3_Err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@ import "git.32bit.cafe/32bitcafe/guestbook/internal/models"
 | 
				
			|||||||
import "git.32bit.cafe/32bitcafe/guestbook/internal/forms"
 | 
					import "git.32bit.cafe/32bitcafe/guestbook/internal/forms"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func gbUrl(gb models.Guestbook) string {
 | 
					func gbUrl(gb models.Guestbook) string {
 | 
				
			||||||
    return fmt.Sprintf("/guestbooks/%s", gb.Slug())
 | 
					    return fmt.Sprintf("/guestbooks/%s", shortIdToSlug(gb.ShortId))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
templ gbCreateForm(csrf_token string) {
 | 
					templ gbCreateForm(csrf_token string) {
 | 
				
			||||||
@ -130,7 +130,7 @@ templ GuestbookDashboardCommentsView(title string, data CommonData, guestbook mo
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
templ commentForm(data CommonData, gb models.Guestbook, form forms.CommentCreateForm) {
 | 
					templ commentForm(data CommonData, gb models.Guestbook, form forms.CommentCreateForm) {
 | 
				
			||||||
    {{ postUrl := fmt.Sprintf("/guestbooks/%s/comments/create", gb.Slug()) }}
 | 
					    {{ postUrl := fmt.Sprintf("/guestbooks/%s/comments/create", shortIdToSlug(gb.ShortId)) }}
 | 
				
			||||||
    <form action={ templ.URL(postUrl) } method="post">
 | 
					    <form action={ templ.URL(postUrl) } method="post">
 | 
				
			||||||
        <input type="hidden" name="csrf_token" value={data.CSRFToken}>
 | 
					        <input type="hidden" name="csrf_token" value={data.CSRFToken}>
 | 
				
			||||||
        <div>
 | 
					        <div>
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@ import "git.32bit.cafe/32bitcafe/guestbook/internal/models"
 | 
				
			|||||||
import "git.32bit.cafe/32bitcafe/guestbook/internal/forms"
 | 
					import "git.32bit.cafe/32bitcafe/guestbook/internal/forms"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func gbUrl(gb models.Guestbook) string {
 | 
					func gbUrl(gb models.Guestbook) string {
 | 
				
			||||||
	return fmt.Sprintf("/guestbooks/%s", gb.Slug())
 | 
						return fmt.Sprintf("/guestbooks/%s", shortIdToSlug(gb.ShortId))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func gbCreateForm(csrf_token string) templ.Component {
 | 
					func gbCreateForm(csrf_token string) templ.Component {
 | 
				
			||||||
@ -575,7 +575,7 @@ func commentForm(data CommonData, gb models.Guestbook, form forms.CommentCreateF
 | 
				
			|||||||
			templ_7745c5c3_Var28 = templ.NopComponent
 | 
								templ_7745c5c3_Var28 = templ.NopComponent
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx = templ.ClearChildren(ctx)
 | 
							ctx = templ.ClearChildren(ctx)
 | 
				
			||||||
		postUrl := fmt.Sprintf("/guestbooks/%s/comments/create", gb.Slug())
 | 
							postUrl := fmt.Sprintf("/guestbooks/%s/comments/create", shortIdToSlug(gb.ShortId))
 | 
				
			||||||
		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<form action=\"")
 | 
							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<form action=\"")
 | 
				
			||||||
		if templ_7745c5c3_Err != nil {
 | 
							if templ_7745c5c3_Err != nil {
 | 
				
			||||||
			return templ_7745c5c3_Err
 | 
								return templ_7745c5c3_Err
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user