Skip to content

Commit 4e9f52a

Browse files
authored
fix(storage): list folders (#454)
1 parent f63f1a0 commit 4e9f52a

File tree

4 files changed

+105
-86
lines changed

4 files changed

+105
-86
lines changed

Sources/Storage/Bucket.swift

Lines changed: 0 additions & 38 deletions
This file was deleted.

Sources/Storage/FileObject.swift

Lines changed: 0 additions & 48 deletions
This file was deleted.

Sources/Storage/Types.swift

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Helpers
23

34
public struct SearchOptions: Encodable, Sendable {
45
var prefix: String
@@ -118,3 +119,91 @@ public struct DestinationOptions: Sendable {
118119
self.destinationBucket = destinationBucket
119120
}
120121
}
122+
123+
public struct FileObject: Identifiable, Hashable, Codable, Sendable {
124+
public var name: String
125+
public var bucketId: String?
126+
public var owner: String?
127+
public var id: UUID?
128+
public var updatedAt: Date?
129+
public var createdAt: Date?
130+
public var lastAccessedAt: Date?
131+
public var metadata: [String: AnyJSON]?
132+
public var buckets: Bucket?
133+
134+
public init(
135+
name: String,
136+
bucketId: String? = nil,
137+
owner: String? = nil,
138+
id: UUID? = nil,
139+
updatedAt: Date? = nil,
140+
createdAt: Date? = nil,
141+
lastAccessedAt: Date? = nil,
142+
metadata: [String: AnyJSON]? = nil,
143+
buckets: Bucket? = nil
144+
) {
145+
self.name = name
146+
self.bucketId = bucketId
147+
self.owner = owner
148+
self.id = id
149+
self.updatedAt = updatedAt
150+
self.createdAt = createdAt
151+
self.lastAccessedAt = lastAccessedAt
152+
self.metadata = metadata
153+
self.buckets = buckets
154+
}
155+
156+
enum CodingKeys: String, CodingKey {
157+
case name
158+
case bucketId = "bucket_id"
159+
case owner
160+
case id
161+
case updatedAt = "updated_at"
162+
case createdAt = "created_at"
163+
case lastAccessedAt = "last_accessed_at"
164+
case metadata
165+
case buckets
166+
}
167+
}
168+
169+
public struct Bucket: Identifiable, Hashable, Codable, Sendable {
170+
public var id: String
171+
public var name: String
172+
public var owner: String
173+
public var isPublic: Bool
174+
public var createdAt: Date
175+
public var updatedAt: Date
176+
public var allowedMimeTypes: [String]?
177+
public var fileSizeLimit: Int64?
178+
179+
public init(
180+
id: String,
181+
name: String,
182+
owner: String,
183+
isPublic: Bool,
184+
createdAt: Date,
185+
updatedAt: Date,
186+
allowedMimeTypes: [String]? = nil,
187+
fileSizeLimit: Int64? = nil
188+
) {
189+
self.id = id
190+
self.name = name
191+
self.owner = owner
192+
self.isPublic = isPublic
193+
self.createdAt = createdAt
194+
self.updatedAt = updatedAt
195+
self.allowedMimeTypes = allowedMimeTypes
196+
self.fileSizeLimit = fileSizeLimit
197+
}
198+
199+
enum CodingKeys: String, CodingKey {
200+
case id
201+
case name
202+
case owner
203+
case isPublic = "public"
204+
case createdAt = "created_at"
205+
case updatedAt = "updated_at"
206+
case allowedMimeTypes = "allowed_mime_types"
207+
case fileSizeLimit = "file_size_limit"
208+
}
209+
}

Tests/IntegrationTests/StorageFileIntegrationTests.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,22 @@ final class StorageFileIntegrationTests: XCTestCase {
313313
)
314314
}
315315

316+
func testCreateAndLoadEmptyFolder() async throws {
317+
let path = "empty-folder/.placeholder"
318+
try await storage.from(bucketName).upload(path: path, file: Data())
319+
320+
let files = try await storage.from(bucketName).list()
321+
assertInlineSnapshot(of: files, as: .json) {
322+
"""
323+
[
324+
{
325+
"name" : "empty-folder"
326+
}
327+
]
328+
"""
329+
}
330+
}
331+
316332
private func newBucket(
317333
prefix: String = "",
318334
options: BucketOptions = BucketOptions(public: true)

0 commit comments

Comments
 (0)