@@ -101,50 +101,39 @@ pub struct NewCrate<'a> {
101101}
102102
103103impl < ' a > NewCrate < ' a > {
104- pub fn create_or_update ( self , conn : & mut PgConnection , uploader : i32 ) -> AppResult < Crate > {
104+ pub fn update ( & self , conn : & mut PgConnection ) -> QueryResult < Crate > {
105105 use diesel:: update;
106106
107- conn. transaction ( |conn| {
108- // To avoid race conditions, we try to insert
109- // first so we know whether to add an owner
110- if let Some ( krate) = self . save_new_crate ( conn, uploader) ? {
111- return Ok ( krate) ;
112- }
113-
114- update ( crates:: table)
115- . filter ( canon_crate_name ( crates:: name) . eq ( canon_crate_name ( self . name ) ) )
116- . set ( & self )
117- . returning ( Crate :: as_returning ( ) )
118- . get_result ( conn)
119- . map_err ( Into :: into)
120- } )
107+ update ( crates:: table)
108+ . filter ( canon_crate_name ( crates:: name) . eq ( canon_crate_name ( self . name ) ) )
109+ . set ( self )
110+ . returning ( Crate :: as_returning ( ) )
111+ . get_result ( conn)
121112 }
122113
123- fn save_new_crate ( & self , conn : & mut PgConnection , user_id : i32 ) -> QueryResult < Option < Crate > > {
114+ pub fn create ( & self , conn : & mut PgConnection , user_id : i32 ) -> QueryResult < Crate > {
124115 use crate :: schema:: crates:: dsl:: * ;
125116
126117 conn. transaction ( |conn| {
127- let maybe_inserted : Option < Crate > = diesel:: insert_into ( crates)
118+ let krate : Crate = diesel:: insert_into ( crates)
128119 . values ( self )
129120 . on_conflict_do_nothing ( )
130121 . returning ( Crate :: as_returning ( ) )
131- . get_result ( conn)
132- . optional ( ) ?;
133-
134- if let Some ( ref krate) = maybe_inserted {
135- let owner = CrateOwner {
136- crate_id : krate. id ,
137- owner_id : user_id,
138- created_by : user_id,
139- owner_kind : OwnerKind :: User as i32 ,
140- email_notifications : true ,
141- } ;
142- diesel:: insert_into ( crate_owners:: table)
143- . values ( & owner)
144- . execute ( conn) ?;
145- }
122+ . get_result ( conn) ?;
123+
124+ let owner = CrateOwner {
125+ crate_id : krate. id ,
126+ owner_id : user_id,
127+ created_by : user_id,
128+ owner_kind : OwnerKind :: User as i32 ,
129+ email_notifications : true ,
130+ } ;
131+
132+ diesel:: insert_into ( crate_owners:: table)
133+ . values ( & owner)
134+ . execute ( conn) ?;
146135
147- Ok ( maybe_inserted )
136+ Ok ( krate )
148137 } )
149138 }
150139}
0 commit comments