image.go
go
package models
import "theskyscape.com/repo/skykit"
// Image stores uploaded images separately from decks to avoid memory bloat
type Image struct {
	skykit.Model
	OwnerID     string
	DeckID      string // Optional - which deck this belongs to
	ContentType string // e.g., "image/png"
	Data        string // Base64-encoded image data (no data: prefix)
}
// GetImage retrieves an image by ID
func GetImage(id string) (*Image, error) {
	return Images.Get(id)
}
// GetImageByOwner retrieves an image only if owned by the given user
func GetImageByOwner(id, ownerID string) (*Image, error) {
	return Images.First("WHERE ID = ? AND OwnerID = ?", id, ownerID)
}
// CreateImage stores image data and returns the image record
func CreateImage(ownerID, deckID, contentType, base64Data string) (*Image, error) {
	img := Images.New()
	img.OwnerID = ownerID
	img.DeckID = deckID
	img.ContentType = contentType
	img.Data = base64Data
	return Images.Insert(img)
}
// DeleteImagesForDeck removes all images associated with a deck
func DeleteImagesForDeck(deckID string) error {
	images, err := Images.Search("WHERE DeckID = ?", deckID)
	if err != nil {
		return err
	}
	for _, img := range images {
		Images.Delete(img)
	}
	return nil
}
// DeleteImageByURL deletes an image given its URL (e.g., "/images/abc123")
func DeleteImageByURL(url string) error {
	if url == "" {
		return nil
	}
	// Extract ID from URL like "/images/abc123"
	const prefix = "/images/"
	if len(url) <= len(prefix) {
		return nil
	}
	id := url[len(prefix):]
	img, err := GetImage(id)
	if err != nil {
		return nil // Image doesn't exist, nothing to delete
	}
	return Images.Delete(img)
}
72f0edf

Add rich text formatting and block styling to editor

Connor McCutcheon
@connor
0 stars

Pitch decks to help promote Skyscape Apps

Sign in to comment Sign In