package domain import ( // "io" "time" "strconv" ) type BogFileService struct { user_agent_repo UserAgentRepository file_data_repo FileDataRepository } func NewBogFileService(user_agent_repo UserAgentRepository, file_data_repo FileDataRepository) BogFileService { return BogFileService {user_agent_repo, file_data_repo} } func (b BogFileService) CreateOrOpenInFile(ref FileReference) (BogInFile ,error) { user_agent, err := b.user_agent_repo.GetByName(ref.UserAgent) if err == ErrNotExists { // TODO make this into a factory method? new_ua := UserAgent { 0, ref.UserAgent, time.Now(), time.Duration(time.Second * 400), FileSizeQuota {10, 10 }, } user_agent, err = b.user_agent_repo.Create(new_ua) if err != nil { panic(err) } } if err != nil { panic(err) } f, err := b.file_data_repo.Create(ref.Path, strconv.FormatInt(user_agent.ID, 10)) if err != nil { return nil, err } return f, err } func (b BogFileService) OpenOutFile(ref FileReference) (BogOutFile, error) { user_agent, err := b.user_agent_repo.GetByName(ref.UserAgent) if err == ErrNotExists { return nil, err } f, err := b.file_data_repo.Open(ref.Path, strconv.FormatInt(user_agent.ID, 10)) if err != nil { return nil, err } return f, nil }