11// Copyright 2024 the JSR authors. All rights reserved. MIT license.
22use hyper:: { Body , Request } ;
33use routerify:: prelude:: * ;
4- use serde:: { Serialize , Deserialize } ; // 添加 Deserialize
4+ use serde:: { Deserialize , Serialize } ;
55use tracing:: instrument;
66
77use crate :: {
8- db:: { Change , Database } ,
9- util:: { pagination, ApiResult } ,
8+ db:: { Change , Database } ,
9+ util:: { pagination, ApiResult } ,
1010} ;
1111
12- #[ derive( Serialize , Deserialize ) ] // 添加 Deserialize
12+ #[ derive( Serialize , Deserialize ) ]
1313pub struct ApiChange {
14- pub seq : i64 ,
15- pub r#type : String ,
16- pub id : String ,
17- pub changes : serde_json:: Value ,
14+ pub seq : i64 ,
15+ pub r#type : String ,
16+ pub id : String ,
17+ pub changes : serde_json:: Value ,
1818}
1919
2020impl From < Change > for ApiChange {
21- fn from ( change : Change ) -> Self {
22- Self {
23- seq : change. seq ,
24- r#type : change. change_type . to_string ( ) ,
25- id : format ! ( "@jsr/{}__{}" , change. scope_name, change. package_name) ,
26- changes : serde_json:: from_str ( & change. data ) . unwrap ( ) ,
27- }
21+ fn from ( change : Change ) -> Self {
22+ Self {
23+ seq : change. seq ,
24+ r#type : change. change_type . to_string ( ) ,
25+ id : format ! ( "@jsr/{}__{}" , change. scope_name, change. package_name) ,
26+ changes : serde_json:: from_str ( & change. data ) . unwrap ( ) ,
2827 }
28+ }
2929}
3030
3131#[ instrument( name = "GET /api/_changes" , skip( req) , err) ]
3232pub async fn list_changes ( req : Request < Body > ) -> ApiResult < Vec < ApiChange > > {
33- let db = req. data :: < Database > ( ) . unwrap ( ) ;
34- let ( start, limit) = pagination ( & req) ;
35- let changes = db. list_changes ( start, limit) . await ?;
36- Ok ( changes. into_iter ( ) . map ( ApiChange :: from) . collect ( ) )
33+ let db = req. data :: < Database > ( ) . unwrap ( ) ;
34+ let ( start, limit) = pagination ( & req) ;
35+ let changes = db. list_changes ( start, limit) . await ?;
36+ Ok ( changes. into_iter ( ) . map ( ApiChange :: from) . collect ( ) )
3737}
3838
39-
4039#[ cfg( test) ]
4140mod tests {
4241 use super :: ApiChange ;
42+ use crate :: db:: ChangeType ;
4343 use crate :: ids:: PackageName ;
4444 use crate :: ids:: ScopeName ;
4545 use crate :: util:: test:: ApiResultExt ;
4646 use crate :: util:: test:: TestSetup ;
47- use crate :: db:: ChangeType ;
4847 use serde_json:: json;
4948
5049 #[ tokio:: test]
@@ -67,14 +66,17 @@ mod tests {
6766 async fn list_single_change ( ) {
6867 let mut t = TestSetup :: new ( ) . await ;
6968
70- t. ephemeral_database . create_change (
71- ChangeType :: PackageVersionAdded ,
72- & ScopeName :: new ( "test-scope" . to_string ( ) ) . unwrap ( ) ,
73- & PackageName :: new ( "test-package" . to_string ( ) ) . unwrap ( ) ,
74- json ! ( {
75- "version" : "1.0.0"
76- } ) ,
77- ) . await . unwrap ( ) ;
69+ t. ephemeral_database
70+ . create_change (
71+ ChangeType :: PackageVersionAdded ,
72+ & ScopeName :: new ( "test-scope" . to_string ( ) ) . unwrap ( ) ,
73+ & PackageName :: new ( "test-package" . to_string ( ) ) . unwrap ( ) ,
74+ json ! ( {
75+ "version" : "1.0.0"
76+ } ) ,
77+ )
78+ . await
79+ . unwrap ( ) ;
7880
7981 let changes = t
8082 . http ( )
@@ -97,23 +99,29 @@ mod tests {
9799 let mut t = TestSetup :: new ( ) . await ;
98100
99101 // Create two changes
100- t. ephemeral_database . create_change (
101- ChangeType :: PackageVersionAdded ,
102- & ScopeName :: new ( "test-scope" . to_string ( ) ) . unwrap ( ) ,
103- & PackageName :: new ( "test-package-1" . to_string ( ) ) . unwrap ( ) ,
104- json ! ( {
105- "name" : "test-package-1" ,
106- } ) ,
107- ) . await . unwrap ( ) ;
108-
109- t. ephemeral_database . create_change (
110- ChangeType :: PackageVersionAdded ,
111- & ScopeName :: new ( "test-scope" . to_string ( ) ) . unwrap ( ) ,
112- & PackageName :: new ( "test-package-2" . to_string ( ) ) . unwrap ( ) ,
113- json ! ( {
114- "version" : "1.0.0" ,
115- } ) ,
116- ) . await . unwrap ( ) ;
102+ t. ephemeral_database
103+ . create_change (
104+ ChangeType :: PackageVersionAdded ,
105+ & ScopeName :: new ( "test-scope" . to_string ( ) ) . unwrap ( ) ,
106+ & PackageName :: new ( "test-package-1" . to_string ( ) ) . unwrap ( ) ,
107+ json ! ( {
108+ "name" : "test-package-1" ,
109+ } ) ,
110+ )
111+ . await
112+ . unwrap ( ) ;
113+
114+ t. ephemeral_database
115+ . create_change (
116+ ChangeType :: PackageVersionAdded ,
117+ & ScopeName :: new ( "test-scope" . to_string ( ) ) . unwrap ( ) ,
118+ & PackageName :: new ( "test-package-2" . to_string ( ) ) . unwrap ( ) ,
119+ json ! ( {
120+ "version" : "1.0.0" ,
121+ } ) ,
122+ )
123+ . await
124+ . unwrap ( ) ;
117125
118126 // Test limit parameter
119127 let changes = t
@@ -131,7 +139,7 @@ mod tests {
131139 // Test since parameter
132140 let changes = t
133141 . http ( )
134- . get ( & format ! ( "/api/_changes?since={}" , changes[ 0 ] . seq) )
142+ . get ( format ! ( "/api/_changes?since={}" , changes[ 0 ] . seq) )
135143 . call ( )
136144 . await
137145 . unwrap ( )
0 commit comments