Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(asset): implement file system repository and zip decompressor #66

Open
wants to merge 60 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
5f1b183
feat(asset): implement file system repository and zip decompressor
kasugamirai Dec 21, 2024
7ea0393
chore: add .idea to .gitignore
kasugamirai Dec 21, 2024
db64520
feat(asset): enhance asset management with status tracking and zip ex…
kasugamirai Dec 27, 2024
11e654a
feat(asset): implement CRUD operations for asset management
kasugamirai Dec 27, 2024
8ad88c8
refactor(asset): restructure repository interfaces for improved asset…
kasugamirai Dec 27, 2024
61b504b
feat(asset): enhance zip decompression with improved error handling a…
kasugamirai Dec 27, 2024
c3743ed
feat(asset): refactor ZipDecompressor for improved async processing a…
kasugamirai Dec 27, 2024
bb09b06
refactor(asset): remove legacy GCS repository implementation
kasugamirai Dec 27, 2024
60b401e
refactor(asset): rename Repository to GCS and update methods for impr…
kasugamirai Jan 3, 2025
9d62ead
refactor(asset): remove GCS repository implementation to streamline a…
kasugamirai Jan 3, 2025
8faee9e
refactor(asset): remove repository interface and update import paths
kasugamirai Jan 3, 2025
c4b9036
refactor(asset): rename GCSClient to Client and update methods for co…
kasugamirai Jan 3, 2025
ce054b9
refactor(asset): remove decompressor and GCS implementations, update …
kasugamirai Jan 5, 2025
375edef
refactor(asset): enhance ZipDecompressor with new methods and improve…
kasugamirai Jan 5, 2025
2412515
feat(asset): implement asynchronous and direct content compression in…
kasugamirai Jan 5, 2025
1d356a9
refactor(asset): update NewZipDecompressor return type for improved i…
kasugamirai Jan 5, 2025
c3717b2
refactor(asset): remove ZipDecompressor implementation to streamline …
kasugamirai Jan 5, 2025
3957926
refactor(asset): simplify ZipDecompressor and enhance decompression f…
kasugamirai Jan 5, 2025
0645e35
refactor(asset): enhance CompressWithContent for improved concurrency…
kasugamirai Jan 5, 2025
c0b0f15
feat(asset): enhance GCS client with new asset management methods
kasugamirai Jan 5, 2025
15af103
feat(asset): add projectID and workspaceID to Asset struct
kasugamirai Jan 6, 2025
7824b48
refactor(gcs): remove redundant name assignment in CRUD tests
kasugamirai Jan 6, 2025
9a4f777
refactor(asset): improve error handling and logging in ZipDecompresso…
kasugamirai Jan 6, 2025
129d3f0
refactor(asset): remove deprecated repository and asset types to stre…
kasugamirai Jan 6, 2025
667821d
refactor(asset): comment out service methods and remove utils for cod…
kasugamirai Jan 6, 2025
afeaaa3
refactor(gcs): remove GCS client test file to streamline codebase
kasugamirai Jan 6, 2025
acbcaad
refactor(asset): remove asset service implementation to streamline co…
kasugamirai Jan 6, 2025
3f2bc9c
feat(asset): implement asset management queries and mutations
kasugamirai Jan 6, 2025
fd1e4b6
feat(asset): implement asset movement and deletion functionality
kasugamirai Jan 6, 2025
6e99c4a
feat(asset): enhance asset management with new fields and methods
kasugamirai Jan 7, 2025
1248cc6
feat(asset): add decompression and compression methods to asset service
kasugamirai Jan 7, 2025
5375f2f
feat(asset): refactor compression to use channels for asynchronous pr…
kasugamirai Jan 7, 2025
460e01f
refactor(asset): improve zip decompression concurrency and error hand…
kasugamirai Jan 7, 2025
7352cb9
feat(asset): enhance asset event handling with new event types and me…
kasugamirai Jan 7, 2025
4078a4c
refactor(asset): remove pubsub implementation to streamline codebase
kasugamirai Jan 7, 2025
82d9d8e
feat(asset): integrate pubsub functionality for asset event publishing
kasugamirai Jan 7, 2025
4185ab4
feat(asset): reintroduce pubsub functionality for asset event handling
kasugamirai Jan 7, 2025
f8f8301
feat(asset): enhance pubsub functionality with subscription and event…
kasugamirai Jan 7, 2025
17bae14
fix(account): improve error handling in user credential retrieval and…
kasugamirai Jan 7, 2025
29326af
feat(account): add test for asset
kasugamirai Jan 9, 2025
abbb723
refactor(asset): streamline asset event handling and improve error ma…
kasugamirai Jan 9, 2025
4d828d5
feat(asset): add deleteAssetsInGroup mutation for bulk asset deletion
kasugamirai Jan 9, 2025
1428f87
refactor(asset): rename Builder to AssetBuilder and update related tests
kasugamirai Jan 9, 2025
7af2ba8
chore(asset): remove group service implementation and related tests
kasugamirai Jan 9, 2025
dd556f2
feat(asset): add SetSize method and refactor resolver to use asset us…
kasugamirai Jan 9, 2025
6d890f9
refactor(asset): remove unused asset usecase and interactor implement…
kasugamirai Jan 12, 2025
8b3514b
refactor(asset): update import path for asset usecase in resolver
kasugamirai Jan 12, 2025
9798ad9
refactor(asset): migrate ID types to new id package and clean up doma…
kasugamirai Jan 12, 2025
afda58a
refactor(asset): remove deprecated domain files and update references…
kasugamirai Jan 13, 2025
39b0572
feat(asset): implement validation for Asset and Group entities
kasugamirai Jan 13, 2025
4abf753
feat(asset): enhance asset usecase and resolver error handling
kasugamirai Jan 13, 2025
ae39bf0
fix(asset): improve error handling in builders and tests
kasugamirai Jan 13, 2025
44df313
refactor(asset): remove unused repository interface and clean up vali…
kasugamirai Jan 13, 2025
ede3ff9
refactor(asset): streamline CreatedAt methods in builders
kasugamirai Jan 13, 2025
c545a1a
refactor(asset): remove event package and clean up builder error hand…
kasugamirai Jan 13, 2025
ebcfc72
Revert
kasugamirai Jan 13, 2025
b88d638
refactor(asset): simplify loop syntax in DecompressZipContent method
kasugamirai Jan 13, 2025
ae883ae
refactor(asset): improve asset and group entity handling and error ma…
kasugamirai Jan 21, 2025
f06a63e
refactor(asset): update ID methods and improve error handling in deco…
kasugamirai Jan 26, 2025
9124c84
refactor(asset): remove unused NewValidationResult function
kasugamirai Jan 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor(asset): rename Builder to AssetBuilder and update related tests
kasugamirai committed Jan 21, 2025
commit 1428f877c9a46b7b02fe1aa289db1487d3708343
102 changes: 84 additions & 18 deletions asset/domain/build.go
Original file line number Diff line number Diff line change
@@ -11,15 +11,15 @@ var (
ErrEmptySize = errors.New("size must be greater than 0")
)

type Builder struct {
type AssetBuilder struct {
a *Asset
}

func New() *Builder {
return &Builder{a: &Asset{}}
func NewAssetBuilder() *AssetBuilder {
return &AssetBuilder{a: &Asset{}}
}

func (b *Builder) Build() (*Asset, error) {
func (b *AssetBuilder) Build() (*Asset, error) {
if b.a.id.IsNil() {
return nil, ErrInvalidID
}
@@ -43,75 +43,141 @@ func (b *Builder) Build() (*Asset, error) {
return b.a, nil
}

func (b *Builder) MustBuild() *Asset {
func (b *AssetBuilder) MustBuild() *Asset {
r, err := b.Build()
if err != nil {
panic(err)
}
return r
}

func (b *Builder) ID(id ID) *Builder {
func (b *AssetBuilder) ID(id ID) *AssetBuilder {
b.a.id = id
return b
}

func (b *Builder) NewID() *Builder {
func (b *AssetBuilder) NewID() *AssetBuilder {
b.a.id = NewID()
return b
}

func (b *Builder) GroupID(groupID GroupID) *Builder {
func (b *AssetBuilder) GroupID(groupID GroupID) *AssetBuilder {
b.a.groupID = groupID
return b
}

func (b *Builder) ProjectID(projectID ProjectID) *Builder {
func (b *AssetBuilder) ProjectID(projectID ProjectID) *AssetBuilder {
b.a.projectID = projectID
return b
}

func (b *Builder) WorkspaceID(workspaceID WorkspaceID) *Builder {
func (b *AssetBuilder) WorkspaceID(workspaceID WorkspaceID) *AssetBuilder {
b.a.workspaceID = workspaceID
return b
}

func (b *Builder) Name(name string) *Builder {
func (b *AssetBuilder) Name(name string) *AssetBuilder {
b.a.name = name
return b
}

func (b *Builder) Size(size int64) *Builder {
func (b *AssetBuilder) Size(size int64) *AssetBuilder {
b.a.size = size
return b
}

func (b *Builder) URL(url string) *Builder {
func (b *AssetBuilder) URL(url string) *AssetBuilder {
b.a.url = url
return b
}

func (b *Builder) ContentType(contentType string) *Builder {
func (b *AssetBuilder) ContentType(contentType string) *AssetBuilder {
b.a.contentType = contentType
return b
}

func (b *Builder) Status(status Status) *Builder {
func (b *AssetBuilder) Status(status Status) *AssetBuilder {
b.a.status = status
return b
}

func (b *Builder) Error(err string) *Builder {
func (b *AssetBuilder) Error(err string) *AssetBuilder {
b.a.error = err
return b
}

func (b *Builder) CreatedAt(createdAt time.Time) *Builder {
func (b *AssetBuilder) CreatedAt(createdAt time.Time) *AssetBuilder {
b.a.createdAt = createdAt
return b
}

func (b *Builder) UpdatedAt(updatedAt time.Time) *Builder {
func (b *AssetBuilder) UpdatedAt(updatedAt time.Time) *AssetBuilder {
b.a.updatedAt = updatedAt
return b
}

type GroupBuilder struct {
g *Group
}

func NewGroupBuilder() *GroupBuilder {
return &GroupBuilder{g: &Group{}}
}

func (b *GroupBuilder) Build() (*Group, error) {
if b.g.id.IsNil() {
return nil, ErrInvalidID
}
if b.g.name == "" {
return nil, ErrEmptyGroupName
}
if b.g.createdAt.IsZero() {
now := time.Now()
b.g.createdAt = now
b.g.updatedAt = now
}
return b.g, nil
}

func (b *GroupBuilder) MustBuild() *Group {
r, err := b.Build()
if err != nil {
panic(err)
}
return r
}

func (b *GroupBuilder) ID(id GroupID) *GroupBuilder {
b.g.id = id
return b
}

func (b *GroupBuilder) NewID() *GroupBuilder {
b.g.id = NewGroupID()
return b
}

func (b *GroupBuilder) Name(name string) *GroupBuilder {
b.g.name = name
return b
}

func (b *GroupBuilder) Policy(policy string) *GroupBuilder {
b.g.policy = policy
return b
}

func (b *GroupBuilder) Description(description string) *GroupBuilder {
b.g.description = description
return b
}

func (b *GroupBuilder) CreatedAt(createdAt time.Time) *GroupBuilder {
b.g.createdAt = createdAt
return b
}

func (b *GroupBuilder) UpdatedAt(updatedAt time.Time) *GroupBuilder {
b.g.updatedAt = updatedAt
return b
}
126 changes: 63 additions & 63 deletions asset/domain/build_test.go
Original file line number Diff line number Diff line change
@@ -7,13 +7,13 @@ import (
"github.com/stretchr/testify/assert"
)

func TestNew(t *testing.T) {
b := New()
func TestNewAssetBuilder(t *testing.T) {
b := NewAssetBuilder()
assert.NotNil(t, b)
assert.NotNil(t, b.a)
}

func TestBuilder_Build(t *testing.T) {
func TestAssetBuilder_Build(t *testing.T) {
now := time.Now()
id := NewID()
wid := NewWorkspaceID()
@@ -22,14 +22,14 @@ func TestBuilder_Build(t *testing.T) {

tests := []struct {
name string
build func() *Builder
build func() *AssetBuilder
want *Asset
wantErr error
}{
{
name: "success",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
ID(id).
WorkspaceID(wid).
GroupID(gid).
@@ -60,8 +60,8 @@ func TestBuilder_Build(t *testing.T) {
},
{
name: "success with defaults",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
ID(id).
WorkspaceID(wid).
URL("https://example.com/test.txt").
@@ -77,8 +77,8 @@ func TestBuilder_Build(t *testing.T) {
},
{
name: "error invalid id",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
WorkspaceID(wid).
URL("https://example.com/test.txt").
Size(100)
@@ -87,8 +87,8 @@ func TestBuilder_Build(t *testing.T) {
},
{
name: "error empty workspace id",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
ID(id).
URL("https://example.com/test.txt").
Size(100)
@@ -97,8 +97,8 @@ func TestBuilder_Build(t *testing.T) {
},
{
name: "error empty url",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
ID(id).
WorkspaceID(wid).
Size(100)
@@ -107,8 +107,8 @@ func TestBuilder_Build(t *testing.T) {
},
{
name: "error invalid size",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
ID(id).
WorkspaceID(wid).
URL("https://example.com/test.txt").
@@ -140,20 +140,20 @@ func TestBuilder_Build(t *testing.T) {
}
}

func TestBuilder_MustBuild(t *testing.T) {
func TestAssetBuilder_MustBuild(t *testing.T) {
id := NewID()
wid := NewWorkspaceID()

tests := []struct {
name string
build func() *Builder
build func() *AssetBuilder
want *Asset
wantPanic error
}{
{
name: "success",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
ID(id).
WorkspaceID(wid).
URL("https://example.com/test.txt").
@@ -169,8 +169,8 @@ func TestBuilder_MustBuild(t *testing.T) {
},
{
name: "panic on invalid id",
build: func() *Builder {
return New().
build: func() *AssetBuilder {
return NewAssetBuilder().
WorkspaceID(wid).
URL("https://example.com/test.txt").
Size(100)
@@ -200,13 +200,13 @@ func TestBuilder_MustBuild(t *testing.T) {
}
}

func TestBuilder_NewID(t *testing.T) {
b := New().NewID()
func TestAssetBuilder_NewID(t *testing.T) {
b := NewAssetBuilder().NewID()
assert.NotNil(t, b.a.id)
assert.False(t, b.a.id.IsNil())
}

func TestBuilder_Setters(t *testing.T) {
func TestAssetBuilder_Setters(t *testing.T) {
now := time.Now()
id := NewID()
wid := NewWorkspaceID()
@@ -215,114 +215,114 @@ func TestBuilder_Setters(t *testing.T) {

tests := []struct {
name string
build func() *Builder
check func(*testing.T, *Builder)
build func() *AssetBuilder
check func(*testing.T, *AssetBuilder)
}{
{
name: "ID",
build: func() *Builder {
return New().ID(id)
build: func() *AssetBuilder {
return NewAssetBuilder().ID(id)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, id, b.a.id)
},
},
{
name: "WorkspaceID",
build: func() *Builder {
return New().WorkspaceID(wid)
build: func() *AssetBuilder {
return NewAssetBuilder().WorkspaceID(wid)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, wid, b.a.workspaceID)
},
},
{
name: "GroupID",
build: func() *Builder {
return New().GroupID(gid)
build: func() *AssetBuilder {
return NewAssetBuilder().GroupID(gid)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, gid, b.a.groupID)
},
},
{
name: "ProjectID",
build: func() *Builder {
return New().ProjectID(pid)
build: func() *AssetBuilder {
return NewAssetBuilder().ProjectID(pid)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, pid, b.a.projectID)
},
},
{
name: "Name",
build: func() *Builder {
return New().Name("test.txt")
build: func() *AssetBuilder {
return NewAssetBuilder().Name("test.txt")
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, "test.txt", b.a.name)
},
},
{
name: "Size",
build: func() *Builder {
return New().Size(100)
build: func() *AssetBuilder {
return NewAssetBuilder().Size(100)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, int64(100), b.a.size)
},
},
{
name: "URL",
build: func() *Builder {
return New().URL("https://example.com/test.txt")
build: func() *AssetBuilder {
return NewAssetBuilder().URL("https://example.com/test.txt")
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, "https://example.com/test.txt", b.a.url)
},
},
{
name: "ContentType",
build: func() *Builder {
return New().ContentType("text/plain")
build: func() *AssetBuilder {
return NewAssetBuilder().ContentType("text/plain")
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, "text/plain", b.a.contentType)
},
},
{
name: "Status",
build: func() *Builder {
return New().Status(StatusActive)
build: func() *AssetBuilder {
return NewAssetBuilder().Status(StatusActive)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, StatusActive, b.a.status)
},
},
{
name: "Error",
build: func() *Builder {
return New().Error("test error")
build: func() *AssetBuilder {
return NewAssetBuilder().Error("test error")
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, "test error", b.a.error)
},
},
{
name: "CreatedAt",
build: func() *Builder {
return New().CreatedAt(now)
build: func() *AssetBuilder {
return NewAssetBuilder().CreatedAt(now)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, now, b.a.createdAt)
},
},
{
name: "UpdatedAt",
build: func() *Builder {
return New().UpdatedAt(now)
build: func() *AssetBuilder {
return NewAssetBuilder().UpdatedAt(now)
},
check: func(t *testing.T, b *Builder) {
check: func(t *testing.T, b *AssetBuilder) {
assert.Equal(t, now, b.a.updatedAt)
},
},