@@ -5,6 +5,7 @@ mod gas_storage;
55mod quota;
66mod revenue;
77mod usage;
8+ mod plan_templates;
89use soroban_sdk:: { token, Address , Bytes , BytesN , Env , IntoVal , String , TryFromVal , Val , Vec } ;
910use subtrackr_types:: {
1011 ChargeCommitment , Interval , Invoice , MevAlert , MevProtectionConfig , Plan , StorageKey ,
@@ -1405,4 +1406,143 @@ impl SubTrackrSubscription {
14051406 . expect ( "Subscription not found" ) ;
14061407 usage:: check_quota ( & env, & storage, subscription_id, sub. plan_id , metric)
14071408 }
1409+
1410+ // ── Plan Templates ──
1411+
1412+ pub fn create_template (
1413+ env : Env ,
1414+ proxy : Address ,
1415+ storage : Address ,
1416+ owner : Address ,
1417+ name : String ,
1418+ description : String ,
1419+ base_price : i128 ,
1420+ token : Address ,
1421+ interval : Interval ,
1422+ tiers : Vec < plan_templates:: PricingTier > ,
1423+ features : Vec < String > ,
1424+ ) -> u64 {
1425+ proxy. require_auth ( ) ;
1426+ owner. require_auth ( ) ;
1427+ plan_templates:: create_template (
1428+ & env,
1429+ & storage,
1430+ & owner,
1431+ name,
1432+ description,
1433+ base_price,
1434+ token,
1435+ interval,
1436+ tiers,
1437+ features,
1438+ )
1439+ }
1440+
1441+ pub fn publish_template_version (
1442+ env : Env ,
1443+ proxy : Address ,
1444+ storage : Address ,
1445+ caller : Address ,
1446+ template_id : u64 ,
1447+ name : String ,
1448+ description : String ,
1449+ base_price : i128 ,
1450+ tiers : Vec < plan_templates:: PricingTier > ,
1451+ features : Vec < String > ,
1452+ ) -> u64 {
1453+ proxy. require_auth ( ) ;
1454+ caller. require_auth ( ) ;
1455+ plan_templates:: publish_version (
1456+ & env,
1457+ & storage,
1458+ & caller,
1459+ template_id,
1460+ name,
1461+ description,
1462+ base_price,
1463+ tiers,
1464+ features,
1465+ )
1466+ }
1467+
1468+ pub fn set_template_shared (
1469+ env : Env ,
1470+ proxy : Address ,
1471+ storage : Address ,
1472+ caller : Address ,
1473+ template_id : u64 ,
1474+ shared : bool ,
1475+ ) {
1476+ proxy. require_auth ( ) ;
1477+ caller. require_auth ( ) ;
1478+ plan_templates:: set_shared ( & env, & storage, & caller, template_id, shared)
1479+ }
1480+
1481+ pub fn instantiate_template (
1482+ env : Env ,
1483+ proxy : Address ,
1484+ storage : Address ,
1485+ caller : Address ,
1486+ template_id : u64 ,
1487+ overrides : plan_templates:: TemplateOverrides ,
1488+ ) -> plan_templates:: ResolvedPlan {
1489+ proxy. require_auth ( ) ;
1490+ caller. require_auth ( ) ;
1491+ plan_templates:: instantiate ( & env, & storage, & caller, template_id, overrides)
1492+ }
1493+
1494+ pub fn get_template (
1495+ env : Env ,
1496+ proxy : Address ,
1497+ storage : Address ,
1498+ template_id : u64 ,
1499+ ) -> Option < plan_templates:: PlanTemplate > {
1500+ proxy. require_auth ( ) ;
1501+ plan_templates:: get_template ( & env, & storage, template_id)
1502+ }
1503+
1504+ pub fn get_owner_templates (
1505+ env : Env ,
1506+ proxy : Address ,
1507+ storage : Address ,
1508+ owner : Address ,
1509+ ) -> Vec < u64 > {
1510+ proxy. require_auth ( ) ;
1511+ plan_templates:: get_owner_templates ( & env, & storage, & owner)
1512+ }
1513+
1514+ pub fn get_shared_templates ( env : Env , proxy : Address , storage : Address ) -> Vec < u64 > {
1515+ proxy. require_auth ( ) ;
1516+ plan_templates:: get_shared_templates ( & env, & storage)
1517+ }
1518+
1519+ pub fn get_template_versions (
1520+ env : Env ,
1521+ proxy : Address ,
1522+ storage : Address ,
1523+ root_id : u64 ,
1524+ ) -> Vec < u64 > {
1525+ proxy. require_auth ( ) ;
1526+ plan_templates:: get_template_versions ( & env, & storage, root_id)
1527+ }
1528+
1529+ pub fn get_latest_template_version (
1530+ env : Env ,
1531+ proxy : Address ,
1532+ storage : Address ,
1533+ root_id : u64 ,
1534+ ) -> Option < plan_templates:: PlanTemplate > {
1535+ proxy. require_auth ( ) ;
1536+ plan_templates:: get_latest_version ( & env, & storage, root_id)
1537+ }
1538+
1539+ pub fn get_template_analytics (
1540+ env : Env ,
1541+ proxy : Address ,
1542+ storage : Address ,
1543+ template_id : u64 ,
1544+ ) -> plan_templates:: TemplateAnalytics {
1545+ proxy. require_auth ( ) ;
1546+ plan_templates:: get_analytics ( & env, & storage, template_id)
1547+ }
14081548}
0 commit comments