You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.1 KiB
47 lines
1.1 KiB
package metadata
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
type AudioMetadata struct {
|
|
FileName string `json:"filename"`
|
|
Duration int `json:"duration"`
|
|
}
|
|
|
|
type MetadataMemoryStorage struct {
|
|
Metadata map[string]AudioMetadata
|
|
}
|
|
|
|
func NewMetadataMemoryStorage() *MetadataMemoryStorage {
|
|
return &MetadataMemoryStorage{Metadata: map[string]AudioMetadata{}}
|
|
}
|
|
|
|
func (metadata *MetadataMemoryStorage) Put(a AudioMetadata) (err error) {
|
|
fmt.Println(metadata, a)
|
|
_, ok := metadata.Metadata[a.FileName]
|
|
if !ok {
|
|
metadata.Metadata[a.FileName] = a
|
|
return nil
|
|
}
|
|
return errors.New("already exists") // 409 Conflict
|
|
}
|
|
|
|
func (metadata *MetadataMemoryStorage) get(filename string) (a AudioMetadata, err error) {
|
|
val, ok := metadata.Metadata[filename]
|
|
if ok {
|
|
return val, nil
|
|
}
|
|
return AudioMetadata{}, errors.New("not found") // 404 Not Found
|
|
}
|
|
|
|
func (metadata *MetadataMemoryStorage) filterMaxDuration(maxDuration int) (a []string) {
|
|
result := []string{}
|
|
for _, item := range metadata.Metadata {
|
|
if (item.Duration <= maxDuration) || (maxDuration <= 0) {
|
|
result = append(result, item.FileName)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|