go.mercari.io/datastore@v1.8.2/testsuite/realworld/tbf/image_model.go (about)

     1  package tbf
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"time"
     7  
     8  	"go.mercari.io/datastore"
     9  )
    10  
    11  var _ datastore.PropertyTranslator = imageID(0)
    12  var _ datastore.KeyLoader = &Image{}
    13  
    14  const kindImage = "Image"
    15  
    16  type imageID int64
    17  
    18  // Image provides information about circle image on GCS.
    19  type Image struct {
    20  	ID            imageID  `json:"id" datastore:"-"`
    21  	OwnerCircleID CircleID `json:"ownerCircleID"`
    22  	GCSPath       string   `json:"gcsPath"`
    23  	CreatedAt     unixTime `json:"createdAt"`
    24  	UpdatedAt     unixTime `json:"updatedAt"`
    25  }
    26  
    27  func keyToImageID(key datastore.Key) (imageID, error) {
    28  	if key.Kind() != kindImage {
    29  		return 0, fmt.Errorf("unexpected kind: %s", key.Kind())
    30  	}
    31  
    32  	return imageID(key.ID()), nil
    33  }
    34  
    35  // ToPropertyValue convert the value to the valid value as the property of datastore.
    36  func (id imageID) ToPropertyValue(ctx context.Context) (interface{}, error) {
    37  	client := ctx.Value(contextClient{}).(datastore.Client)
    38  	key := client.IDKey(kindImage, int64(id), nil)
    39  	return key, nil
    40  }
    41  
    42  // FromPropertyValue convert property value to the valid value as the application.
    43  func (id imageID) FromPropertyValue(ctx context.Context, p datastore.Property) (dst interface{}, err error) {
    44  	key, ok := p.Value.(datastore.Key)
    45  	if !ok {
    46  		return nil, datastore.ErrInvalidEntityType
    47  	}
    48  	return keyToImageID(key)
    49  }
    50  
    51  // ToKey convert the value to datastore.Key.
    52  func (id imageID) ToKey(client datastore.Client) datastore.Key {
    53  	return client.IDKey(kindImage, int64(id), nil)
    54  }
    55  
    56  // Load loads all of the provided properties into struct.
    57  func (image *Image) Load(ctx context.Context, ps []datastore.Property) error {
    58  	return datastore.LoadStruct(ctx, image, ps)
    59  }
    60  
    61  // Save saves all of struct fields to properties.
    62  func (image *Image) Save(ctx context.Context) ([]datastore.Property, error) {
    63  	if time.Time(image.CreatedAt).IsZero() {
    64  		image.CreatedAt = unixTime(timeNow())
    65  	}
    66  	image.UpdatedAt = unixTime(timeNow())
    67  
    68  	return datastore.SaveStruct(ctx, image)
    69  }
    70  
    71  // LoadKey loads key data into struct.
    72  func (image *Image) LoadKey(ctx context.Context, k datastore.Key) error {
    73  	image.ID = imageID(k.ID())
    74  	return nil
    75  }