package integration import ( "time" "os" "path" "caj-larsson/bog/domain" ) type FileSystemBogFileData struct { path string size int64 mod_time time.Time file *os.File } func (f FileSystemBogFileData) Read(p []byte) (int, error) { return f.file.Read(p) } func (f FileSystemBogFileData) Write(p []byte) (int, error) { return f.file.Write(p) } func (f FileSystemBogFileData) Close() error { return f.file.Close() } func (f FileSystemBogFileData) Seek(offset int64, whence int) (int64, error) { return f.file.Seek(offset, whence) } func (f FileSystemBogFileData) Path() string { return f.path } func (f FileSystemBogFileData) Size() int64 { return f.size } func (f FileSystemBogFileData) Modified() time.Time{ return time.Now() } type FileSystemBogRepository struct { Root string } func (f FileSystemBogRepository) absPath(filename string, user_agent_label string) string { return path.Join(f.Root, user_agent_label, filename) } func (f FileSystemBogRepository) Create(filename string, user_agent_label string) (domain.BogInFile, error) { abs_path := f.absPath(filename, user_agent_label) //file_name := path.Base(open_path) dir := path.Dir(abs_path) os.MkdirAll(dir, 0750) file, err := os.OpenFile(abs_path, os.O_RDWR|os.O_CREATE, 0644) if err != nil { panic(err) } stat_info, err := file.Stat() if err != nil { panic(err) } bfd := FileSystemBogFileData {filename, stat_info.Size(), stat_info.ModTime(), file} return bfd, nil } func (f FileSystemBogRepository) Open(filename string, user_agent_label string) (domain.BogOutFile, error) { abs_path := f.absPath(filename, user_agent_label) //file_name := path.Base(open_path) dir := path.Dir(abs_path) os.MkdirAll(dir, 0750) file, err := os.OpenFile(abs_path, os.O_RDONLY, 0644) if err != nil { return nil, domain.ErrNotExists } bfd := FileSystemBogFileData {filename, 0, time.Now(), file} return bfd, nil } func (f FileSystemBogRepository) Delete(filename string, user_agent_label string) { }