14
14
15
15
use super :: * ;
16
16
17
- use buffrs:: package:: PackageType ;
17
+ use buffrs:: package:: { PackageDirectory , PackageType } ;
18
18
use semver:: Version ;
19
19
use serde:: { Deserialize , Serialize } ;
20
20
use sha3:: { Digest , Sha3_256 } ;
@@ -108,6 +108,7 @@ impl Publish<PgsqlMetadataStorage> for PackageManifest {
108
108
let db_package = sqlx:: query_as :: < _ , PgPackage > ( SELECT_OR_INSERT_PACKAGE_QUERY )
109
109
. bind ( package. name . to_string ( ) )
110
110
. bind ( package_lib)
111
+ . bind ( package. directory . as_ref ( ) . map ( |d| d. to_string ( ) ) )
111
112
. fetch_one ( & mut * tx)
112
113
. await
113
114
. map_err ( |_| MetadataStorageError :: Internal ) ?;
@@ -190,8 +191,8 @@ struct PgPackage {
190
191
191
192
const SELECT_OR_INSERT_PACKAGE_QUERY : & str = r#"
192
193
WITH ins AS (
193
- INSERT INTO packages (name, type, created_at, updated_at)
194
- SELECT $1, $2, NOW(), NOW()
194
+ INSERT INTO packages (name, type, directory, created_at, updated_at)
195
+ SELECT $1, $2, $3, NOW(), NOW()
195
196
WHERE NOT EXISTS (SELECT 1 FROM packages WHERE name = $1)
196
197
RETURNING *
197
198
)
@@ -207,18 +208,19 @@ struct PgPackageVersionQuery {
207
208
name : String ,
208
209
#[ sqlx( rename = "type" ) ]
209
210
kind : PgPackageType ,
211
+ directory : Option < String > ,
210
212
version : String ,
211
213
}
212
214
213
215
const SELECT_VERSION_QUERY : & str = r#"
214
- SELECT p.id, p.name, p.type, v.version
216
+ SELECT p.id, p.name, p.type, p.directory, v.version
215
217
FROM versions v
216
218
INNER JOIN packages p ON v.package_id = p.id
217
219
WHERE p.name = $1 and v.version = $2;
218
220
"# ;
219
221
220
222
const SELECT_VERSION_COLLATE : & str = r#"
221
- SELECT p.id, p.name, p.type, v.version
223
+ SELECT p.id, p.name, p.type, p.directory, v.version
222
224
FROM versions v
223
225
INNER JOIN packages p ON v.package_id = p.id
224
226
WHERE p.name = $1
@@ -288,6 +290,19 @@ impl TryFrom<PgPackageVersionQuery> for PackageManifest {
288
290
) ;
289
291
MetadataStorageError :: Internal
290
292
} ) ?,
293
+ directory : value
294
+ . directory
295
+ . as_deref ( )
296
+ . map ( |dir| {
297
+ PackageDirectory :: from_str ( dir) . map_err ( |x| {
298
+ error ! (
299
+ "Error: {}, packageDirectory: {} couldn't be mapped to a PackageDirectory" ,
300
+ x, dir
301
+ ) ;
302
+ MetadataStorageError :: Internal
303
+ } )
304
+ } )
305
+ . transpose ( ) ?,
291
306
version : Version :: from_str ( & value. version ) . map_err ( |x| {
292
307
error ! (
293
308
"Error: {}, version {} couldn't be mapped to a semver::Version" ,
0 commit comments