@@ -113,6 +113,8 @@ pub mod MultiCanvas {
113
113
stencil_counts : LegacyMap :: <u32 , u32 >,
114
114
// Map: (canvas_id, stencil_id) -> stencil metadata
115
115
stencils : LegacyMap :: <(u32 , u32 ), StencilMetadata >,
116
+ // Maps: (canvas_id, stencil_id, user addr) -> if favorited
117
+ stencil_favorites : LegacyMap :: <(u32 , u32 , ContractAddress ), bool >
116
118
}
117
119
118
120
#[event]
@@ -327,6 +329,11 @@ pub mod MultiCanvas {
327
329
self . canvas_count. write (canvas_id + 1 );
328
330
self . unique_names. write (init_params . unique_name, true );
329
331
self . emit (CanvasCreated { canvas_id , init_params });
332
+
333
+ // Auto-favorite the canvas for the creator
334
+ let caller = get_caller_address ();
335
+ self . canvas_favorites. write ((canvas_id , caller ), true );
336
+ self . emit (Event :: CanvasFavorited (CanvasFavorited { canvas_id , user : caller }));
330
337
canvas_id
331
338
}
332
339
@@ -490,6 +497,12 @@ pub mod MultiCanvas {
490
497
self . stencils. write ((canvas_id , stencil_id ), stencil . clone ());
491
498
self . stencil_counts. write (canvas_id , stencil_id + 1 );
492
499
self . emit (StencilAdded { canvas_id , stencil_id , stencil });
500
+
501
+ // Auto-favorite the stencil for the creator
502
+ let caller = get_caller_address ();
503
+ self . stencil_favorites. write ((canvas_id , stencil_id , caller ), true );
504
+ self . emit (StencilFavorited { canvas_id , stencil_id , user : caller });
505
+
493
506
stencil_id
494
507
}
495
508
@@ -502,12 +515,20 @@ pub mod MultiCanvas {
502
515
503
516
fn favorite_stencil (ref self : ContractState , canvas_id : u32 , stencil_id : u32 ) {
504
517
let caller = get_caller_address ();
505
- self . emit (StencilFavorited { canvas_id , stencil_id , user : caller , });
518
+ if self . stencil_favorites. read ((canvas_id , stencil_id , caller )) {
519
+ return ;
520
+ }
521
+ self . stencil_favorites. write ((canvas_id , stencil_id , caller ), true );
522
+ self . emit (StencilFavorited { canvas_id , stencil_id , user : caller });
506
523
}
507
524
508
525
fn unfavorite_stencil (ref self : ContractState , canvas_id : u32 , stencil_id : u32 ) {
509
526
let caller = get_caller_address ();
510
- self . emit (StencilUnfavorited { canvas_id , stencil_id , user : caller , });
527
+ if ! self . stencil_favorites. read ((canvas_id , stencil_id , caller )) {
528
+ return ;
529
+ }
530
+ self . stencil_favorites. write ((canvas_id , stencil_id , caller ), false );
531
+ self . emit (StencilUnfavorited { canvas_id , stencil_id , user : caller });
511
532
}
512
533
}
513
534
0 commit comments