Skip to content

Instantly share code, notes, and snippets.

@thrawn01
Created April 20, 2023 01:33
Show Gist options
  • Save thrawn01/b31b9c3cd1a30f3e65b3eb8965566435 to your computer and use it in GitHub Desktop.
Save thrawn01/b31b9c3cd1a30f3e65b3eb8965566435 to your computer and use it in GitHub Desktop.
The code that ChatGPT gave me
package main
import (
"fmt"
"io"
"math/rand"
"time"
)
type Job struct {
Id int
FileName string
FSType string
Status string
}
type Store1 interface {
GetBatchID() int
}
type Store2 interface {
CreateBatchJob(Job) error
}
type Service struct {
s1 Store1
s2 Store2
}
type FileSystem interface {
ReadFile(name string) (io.ReadCloser, error)
WriteFile(name string) (io.WriteCloser, error)
FSType() string
}
func (s *Service) UploadAndEnqueueJob(appID int, src io.ReadCloser, dest FileSystem) error {
defer src.Close()
// Generate a name using appID and a random string separated by a '-'
randomString := generateRandomString(8)
fileName := fmt.Sprintf("%d-%s", appID, randomString)
// Write all bytes from 'src' to the io.WriteCloser
destFile, err := dest.WriteFile(fileName)
if err != nil {
return err
}
defer destFile.Close()
_, err = io.Copy(destFile, src)
if err != nil {
return err
}
// Call s1.GetBatchID() to get an id
batchID := s.s1.GetBatchID()
// Call s2.CreateBatchJob() using the id as Job.Id, set Job.Status to 'ALLOCATED' and
// Job.Name as the generated name passed to dest.WriteFile()
job := Job{
Id: batchID,
FileName: fileName,
FSType: dest.FSType(),
Status: "ALLOCATED",
}
err = s.s2.CreateBatchJob(job)
if err != nil {
return err
}
return nil
}
func generateRandomString(length int) string {
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
rand.Seed(time.Now().UnixNano())
b := make([]byte, length)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
func main() {
// Implementation of the main function is omitted for brevity.
// You can test the UploadAndEnqueueJob method by providing actual implementations for Store1,
// Store2, and FileSystem interfaces.
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment