diff --git a/api/api.gen.go b/api/api.gen.go index e7534cf05..14ffc6f96 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -1961,6 +1961,12 @@ type GrantUsageRecord struct { Usage float64 `json:"usage"` } +// IDResource IDResource is a resouce with an ID. +type IDResource struct { + // Id A unique identifier for the resource. + Id string `json:"id"` +} + // IngestEventsBody The body of the events request. // Either a single event or a batch of events. type IngestEventsBody struct { @@ -2193,6 +2199,9 @@ type InvoiceFlatFeeLine struct { // billing engine of OpenMeter. Status InvoiceLineStatus `json:"status"` + // Subscriptions Subscription are the references to the subscritpions that this line is related to. + Subscriptions *InvoiceLineSubscriptionReference `json:"subscriptions,omitempty"` + // TaxConfig Tax config specify the tax configuration for this line. TaxConfig *TaxConfig `json:"taxConfig,omitempty"` @@ -2352,6 +2361,18 @@ type InvoiceLineReplaceUpdate struct { // InvoiceLineStatus Line status specifies the status of the line. type InvoiceLineStatus string +// InvoiceLineSubscriptionReference InvoiceLineSubscriptionReference contains the references to the subscriptions that this line is related to. +type InvoiceLineSubscriptionReference struct { + // Item The item this line is related to. + Item IDResource `json:"item"` + + // Phase The phase of the subscription. + Phase IDResource `json:"phase"` + + // Subscription The subscription. + Subscription IDResource `json:"subscription"` +} + // InvoiceLineTaxBehavior InvoiceLineTaxBehavior details how the tax item is applied to the base amount. // // Inclusive means the tax is included in the base amount. @@ -2563,6 +2584,9 @@ type InvoiceUsageBasedLine struct { // billing engine of OpenMeter. Status InvoiceLineStatus `json:"status"` + // Subscriptions Subscription are the references to the subscritpions that this line is related to. + Subscriptions *InvoiceLineSubscriptionReference `json:"subscriptions,omitempty"` + // TaxConfig Tax config specify the tax configuration for this line. TaxConfig *TaxConfig `json:"taxConfig,omitempty"` @@ -12268,724 +12292,726 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "j8a3CAcA", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/go/client.gen.go b/api/client/go/client.gen.go index 9f053d8ba..ba7dac819 100644 --- a/api/client/go/client.gen.go +++ b/api/client/go/client.gen.go @@ -1963,6 +1963,12 @@ type GrantUsageRecord struct { Usage float64 `json:"usage"` } +// IDResource IDResource is a resouce with an ID. +type IDResource struct { + // Id A unique identifier for the resource. + Id *string `json:"id,omitempty"` +} + // IngestEventsBody The body of the events request. // Either a single event or a batch of events. type IngestEventsBody struct { @@ -2195,6 +2201,9 @@ type InvoiceFlatFeeLine struct { // billing engine of OpenMeter. Status *InvoiceLineStatus `json:"status,omitempty"` + // Subscriptions Subscription are the references to the subscritpions that this line is related to. + Subscriptions *InvoiceLineSubscriptionReference `json:"subscriptions,omitempty"` + // TaxConfig Tax config specify the tax configuration for this line. TaxConfig *TaxConfig `json:"taxConfig,omitempty"` @@ -2354,6 +2363,18 @@ type InvoiceLineReplaceUpdate struct { // InvoiceLineStatus Line status specifies the status of the line. type InvoiceLineStatus string +// InvoiceLineSubscriptionReference InvoiceLineSubscriptionReference contains the references to the subscriptions that this line is related to. +type InvoiceLineSubscriptionReference struct { + // Item The item this line is related to. + Item *IDResource `json:"item,omitempty"` + + // Phase The phase of the subscription. + Phase *IDResource `json:"phase,omitempty"` + + // Subscription The subscription. + Subscription *IDResource `json:"subscription,omitempty"` +} + // InvoiceLineTaxBehavior InvoiceLineTaxBehavior details how the tax item is applied to the base amount. // // Inclusive means the tax is included in the base amount. @@ -2565,6 +2586,9 @@ type InvoiceUsageBasedLine struct { // billing engine of OpenMeter. Status *InvoiceLineStatus `json:"status,omitempty"` + // Subscriptions Subscription are the references to the subscritpions that this line is related to. + Subscriptions *InvoiceLineSubscriptionReference `json:"subscriptions,omitempty"` + // TaxConfig Tax config specify the tax configuration for this line. TaxConfig *TaxConfig `json:"taxConfig,omitempty"` @@ -28741,734 +28765,736 @@ func ParseUnscheduleCancelationResponse(rsp *http.Response) (*UnscheduleCancelat // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "H4sIAAAAAAAC/+y9C3PbOLIw+ldQuufWJPvJSpzXbnLr1JZiOxPv5OG1ncnujnI9MAlJ2FAgBwBta+bm", - "v99CNwCCJChRjvMcnTrnjCPi0WgA/Ub3H4MkXxS5YEKrwZM/BgWVdME0k/CvpzzLuJgdyXzKM7ZXKp0v", - "mHx9waTkKXstUyafLuE/XMxGufnDdEuZSiQvNM/F4MngdM4IfCIplywxv44GwwG7KrI8ZYMnU5opNhxw", - "0/a3ksnlYDgQdMEGTwY44nCgkjlbUDP0/0g2HTwZ/F93KrDv4Fd15ySXGoAZfPgwvA7sT5eroD9fkiln", - "WboR8E+XvcHvBXBkad/SNnz1aA/R7Lfgq0bwSii/LGoboAG4B0JznbEFE/rrxus6QL8satvQAdDPGNWl", - "/MpJwiogvyxW65ABsD9K+rWf1G4Qvyw2Q7gA0ENxkfOEveBKHxk5Q40SSyFUG85nPNMIpGtEDvd7QloN", - "G8LKNVtEJnrz4nCf3Hoj+AWTimbZkrwR/LeSkRfsiif5TNJizhP4YPBOzzNGDlMmNJ9yJm8j9uiiyMzM", - "d3d/fPTwP399+HD87O34p+cHu/de/fvu3j8fP3s+GA4KqjWTZs7/95e7O39998vdncfjnef/+Onlq6Od", - "0593/kN35v99vxDFjr7Y+f3dH/cefvifwXCgl4UZWmmzsYMP/gcqJe1CLLsqqEjbi307p5oUVGpF8inR", - "c0YyrjTJS12UmuicYEfCBXzgYqZ64tzOGEX4qlNiYT/A7n1Xp5lIWXqiqS4VW3l6OPYmrg9RrlPfdTXm", - "iq7wOnvElSpZOp7qGC1pLyCRjJqPRPMF6wl8OEUId3Vg7929d3/n7u7O3d3Tu7tP4H9Hd+/u/mcwHExz", - "uaB68GSQUs127KyNha5Y2FM2zSX7tCuzc3y+pakeJ87cKrc0bN+XwqqVZ6zHLcJDuur8fd2sbBWQX5aZ", - "1SEDYF/wBdevp1PF9Cgzf7fhe1Uuzpk0pBZ20RBYyXQpxWgiJmKfTWmZacIV2b17ty/kOFUId4rjDJ7s", - "3r07HCzoFV+UC/iX+ScX9p/+UHCh2cxiPFxEDv/ptQr1nhfNNfRegZ0nuoQQ4rtRiF9S+Z7pIqMJGxf8", - "J7Y8FErTLDtmv5VM6RF2iZ0U88WxPVoUZh0c+xrIAdKC6nkFKAw1HEj2W8klSwdPtCxZ3xMzLopT078B", - "8+txqef3LMzm71zy39lXDTzTTP7TbOFoCkTuR5mXRew6nnBDegm2ItNckplpSs6XilxyPSfsiiaaLKhO", - "5h7qxuGoTxHCS9OUm4lodiTzgknN2Urem5//lyXa/KD0EjhCyljx2v8arkvmi8hyNJWaeBZhhKLjZ3vk", - "/v37jwlyELgChyLJSsUvWOeSzOifikcFq5h17cvhlIhcE1WwxAitKaFEcTHLGKGzmWQzqhm55FlGzpml", - "TyyF7WM0mRNVAsqIkQsBD5dcpPnlaCJ+tZ9+NdefEskUkxcs9btOLmhWdqJlFtnjDQSqYOEWjC6mzMXM", - "ALMoM83N+bTNVRdgbriPB0znbZgORHoDZ0rnn+NE4U6f8N/Z+kM1rE5Vqehs7dkyhMxoUZLppSNs1Qkt", - "mOR5xyGEg9OFmADkvsTubdUluv5TvmD/yUUHYYYzbi6AWYABwi0G9vf3XDBCFUnZlJuVcwHfDsevxsSM", - "S8zAZJ9qek4VI7fmWhdP7ty5vLwccSroKJezO2agHTOQuj2aiDbezYBvTvdgQpjP4btULF2NJ7+0KDMe", - "vDndix6RV7nRfhOQ2vfmVAiWfd2CZV+Av6yQ2Q1laxEHF1+9BbUfuF8PxkMYWws4Lr92T0svaL8ebAcg", - "AvgoFzuBGK9AnjIwIh5ImUtn+zF/R7iq+ZkkecpGE3FsZV4UOoHRwGfJVJELxfquD+fqu7q1K/AS9UZr", - "PasttLnu1wWKxGReLqjYkYymYKHU7EqTQuYXPDXiTyU7Ey5QDuC5GE6EYRFGl6BKcaUBV0nGmdAkZRcs", - "M3K24VmlSJlUmgoYrcKonlNN8iQppWTpRmitLStEcZvbbIauUvIVaColJxytt0tATBNxl+ycFEZ8MWdn", - "IgJsEXqel7pa/JA45CGeWYC9iajQB4cwvgHNITdCoFno9RF3UiYJU8oZ4mHKJtZqPeFykcs5T+bhMQFZ", - "I6NG4WNXyZyKGQOpjQpCYQai8/dMRG+lQhg2vpcA7U0tXWmqI2v30HKU5iZgnWOTAfExEuSSKlIYrUdo", - "J9hZrNAa5qTV7ifC0FpUglFslCxh3KhMRkcMBnhilAD0QwyJpCLNF9mSzJhgkmoj8+UFhW9GHha52JmV", - "TCk4wIgEvJlcEQWn8XLOBFFGn4VDLwBAcwuSGoQw3AXNuNEQUgK9CpkbbLl7v+leIXpXb9YRnXFhZkSp", - "21y/OJuCiynAHNV3fhgsbi2LmpcisMT1HwOPaFjG7CEwnTaBr6Wt1C163VAa0SKOrevYLj4anWtsjQ2g", - "42htGhsNBQV8Xt9i2gPFmxlNj+ZUMfV1i4MrYPyyQmANMAQ1o+IrR2YXhF8YlRVYACYM56JuXnClR9zc", - "75Tts4xpFvEHH+J3kmID72vv7bJqTBC9Yba7vUjneZ4xKjoAxmE7nGseOoNZ03I0EXtUsR0uFBOKa37B", - "wLvNaVZZmfssA/6zmkm1YS0kX1C5PFhQnvWD2fYgzHS5MeBrcGy6iDW20zr81rCnteTnJQgOtvuNrSVm", - "e+2zjLjjpLEGww+pWQc4UJZFb65nfSmb+k4+uC5gOR6nqWQq4jp2H4aDoubYSLheRk3OSV4KLZdr4++w", - "mZF7Ta+MC7YbHc98uRf9UsxzwZAlx7/nStNsz2oPrc9etm5vYctJMxYi1yAdqBXeng/DpqDDtBEW3rPl", - "DorUBeVSkQUVdMZS549XS6XZYkT2qJmFnDOyyFO0NMOxdvKktaL/AWEfUtDsMIWonse7D+4lyQ69u/to", - "56+PH9Gdv+3u3t/ZpY8f3JuyJL33KI06nsZFAWsRy9fTwZNf1rAcLXnBTJcPwzUtqUjP8yto+q6JkHFR", - "jCbitWAknz4BbQDObspNo4URwNB+sqBFYTbjyR8DheP1mG44sAP2WIM7zctXwSX6gFh5SlVM3zxXWhrl", - "CGzhizxlGeiS1tHJUnNxFUiCx8wpXkaZKYqgjc5hy3M5o8JqYKB5cQVuKqOX6hL0cKWpSNgQFVKuFckv", - "jZorpnxWSqugi5QkkoHFgGbAFhuXVDKjLYwjFPSUL5jSdFGYAwq6lFWg8lImDLRH27seRHbv7r0Hm7hw", - "JKPpa5EtnYsXQkMHTwZ7Lq7mNOrqMQcHuPY1YS+YXFCz/dnSyQ+fZh0gXKxeRx8LWfCzc9G49YzIS1QA", - "yO7dew9IMqfmGFoxaEGvXjAx03OjHdx7EMIVWrBaUPGIvDUmJQYXch9B6J1hHphPHlHYhWgIsIxwBwgE", - "BEKWZT0IWRDt8ML2bZMpIyUvqoYu3BDtFhoua3jrzdU1VCElKPHXl/BhOFgwTQ173wBM1yNCQytrnRs3", - "uk2izDJ6bnBXR6QfOsIT4hLu87oVEvyIrRnJU6YvGRNkF+jSvYePuo/qvYePQI/1Rzc4t1wVGUUJOrbh", - "GIbWH5HjonCBZy1M4ocwcCXJhag0t9Y+lkX6EfQ0o0oTO8SnIUYvzAxvYIYOevQhDLr5xZCBodMvKmYR", - "LrS6Yh737+LCxB4t6DnPrFzY4vsk8d+BSfrmnCmSi2xJ2BVXYKtELkcU8MolSXPxg7YxsoDVY4dV4MIN", - "4ai5xYbnk4IuF+ZYkCTPMpYYblpq7zKQ7IKJEq3qxPZwYvkP4B4Hw44dxNy6eQ47+J4tLW4LdmaHPrPN", - "KgF9Dz+QIwtEtSu2i//wocnAVzIPQ6UqpIYsZBS7OQBsc4yf2LJ+NR89aN7MkI7Tnd/v7jx+939u/f3J", - "mf/H7b9EI8HjtKQBNCjK3XHkG9zy6vihghMl6sHMqGI1L4RVpt6zZXUxwmHWnv3TqK5XP/+VeifKhZlV", - "siKX+o1C+yX+Czy+5qwkNEvKjGp2Sq8gXgKCPfeCZwTNY/Qugs9xURh+F+P6YLjOp4ZYlZmOiJEdjxMM", - "QqOm5V5RwVYOX9CrQ2yO1s16xNJw0Nve3jSFDgcfZR7fwOg6HOgcFM1S6I74SPO9OWMM6MZptAbtwEYc", - "zOTw3HEkj9mUSSaSjtMo3WekxcKF5BCqCCVqnktdtQEnrFVlkFlOyyyDf+OcRgIyuqtgLEXm1jhB6bf/", - "tqXNOjswf+JFlDbaK7kxiL73VICmhuyUwnnoWNp1l+Nk5rQehxsO7nVtp0/HBn5KUxvseyTz84wtjq1D", - "rT8lfiPYVcESzdLmEHGKDFGZkiRo+8gl+mzN39a3Z+UodAGmJZxFlRseHHoSCyats1Ln5ihT5+zEUIBb", - "bDQbDcmCZkaeYqkfUC2FpldDwgV4Fv3vC6bAnDiVdMHFbGggS1nCCrAeulYyL41odHsUk6Wf0sxo8M+5", - "0rlcYhxfnDycY0syx6YuhrV1i2y7sQYHWnwsVj2+9ONS9OKDi9UdD4xhrF0icDZV8mZeGuUhImziQpGa", - "AZ2Fodb6A7CVkaJVJ01HQomWXAvoFN89evp8U3A3SS2C56AbNpEdu+v2efYLLtjenMrYovwrHdeESGcc", - "QnPPwtByQtO0Mg5lXFjnuYuVpEWRgTkQnhQRTa9YhE3jWP2v6qtywSRPIhfzGb9iKUm5ShA6BNIwgaLI", - "luSWF0kgAgHuntAu2uD2CM3AaTRwgSobrRGV+rYGq6/cYHXKrnTNWEXhyc3lHE3Z/siYJdlTO+prfzrc", - "d3c+watiaK4d8AvYnVruBDzm/e/XEXYw5KR9xaqP5gpN4cLZe2aYn8Xd4Hs0OnQZGsAYYYnYCnJ7RGXM", - "xAA/16iruVOG2uSSnJeKCyNMAHtcRmgnurlijyeP2azMqCRFroBQYzswgF3OGXCmKmZOzfMyM4SaYODV", - "NBCJ+6lF1t9WV43aelFUou403xaAnFt8SugF5WAWvN3nzMd1+BdsZtQZeE4gK5TT0Hpd83BEFXx6dZj2", - "v0zh5p+arriTHVIlfvxBkQxAPdzHAEFQcAAn9IoUpSxyxdSInM7ZkizokszpBZuIXM+ZtNqaGpLzUpNL", - "9oNkaKUyuppkSrv3ErliGJXWHjjuS+xaSZse2i/ESIUMBeGUacozRdx9gqd2NmTUyBO2RxMUAyp1zzIS", - "Yn20EYeR5dob7YlfhH8eAE7d1sa8MrckM1oNwAY7oub5pSC5sGeGzzhEobqVp3lSGlF2DSoxP04bg/Xv", - "deJwjt+MmgGdWxShKNTmxxMHGxeFei0rDTx+SIHGI8YUHk1wCHPVhA3spZiEgCimIfMBmeUXTArUx8Eh", - "AbEueEou53nGQvU8l+S/pQ2hPtyvFHsVNXN/21KYDexp3SaFiMJbZC26iN+/D9oBQFsH5NYB2ccBuXXt", - "3ZxrrwShV15PKOggsrAiCJTIhaaJrklrbqVu5ij1DdjG9yGODweXuXw/zdActRGm37qOcWQ7zLnxK26F", - "mOYqYLcNtnMNz6Q/MMGKhsi4K0bwbq3cEBrL1TohotY4lChwq/2XWzwdgp/ntjPrGLg8m18vf6CfZ6PY", - "hprVP75DflSQDip52GxNgMOWSOCcmjcJi/OnbgaJplc3CoURRTeBoOkwDJxy6CV3qOp18Pqct9YxiwqO", - "n+pEAdpu5DzER9p0P2Oj3PCegJDJ+uwMtmzuDxdFqeEsYfYoeMrX2J0fwD6m1mySj838xtPCtYJsP4Y4", - "Xe3M8p22eS44kX8utPWio3Gkucv350LYWpIfQ9YN05jQPNA7CjvCPtaFY68SdSJW6SiATfpWCqslhjzK", - "yNixWSYCXty2bBpttPQju9cnuTdu4rEAd1p31lh1btpc8TWq+Vv1+E+mHn+0arnyUvVXMNuhfe4ZXaU0", - "usvXVh/X0/BmDvz22XEtKrO7hzq3nSJO/PM1Ju0QC24HYN1uTHhHolSecHwmz/UcX1NPXVTNBU9dZiZH", - "WZojckWSea4Y2Je9y+gLpBPeBgR8eQPy92bx2rzQhaNN/rL3c2lvTkW6RKAjusxymjYFHMEuSS4RuzZ3", - "BgTRm7/9u1JHGLa0Zg2tudkz4vjYh40Pweuux/uv3cP9vEDbDxyH2qt4G+3J44Gjq+f12UXCqM/mObRN", - "fKqVaweLQ1omoTcLGl/Dgz9sEj++EpoquHDzyPKeA8eyp6wPJe83+MOO1Cw1DTYMJW9HmncHl/ekkTck", - "ENnHDVatuZ5I6Yc4seJi1/MQ3zAiWHrysBVLvgqx5BvyILdA39wS3zjSh26ENSe6MqmuPtC+ncsK8Jnd", - "A43l2adMaxbnDJ+rl2Zb3czCNL26mYH+XFGdFm2Nc1bbm+tzmi6h2T8TRdCI4SpIGv270W+A1Xx9tOLr", - "udzrZeuDjlpDsVY+uPISChFZ9QSSZKmq/FAgZVsH3l/asvZwcLVjWu1cUCnowhwv35xm2eBdV/XBdZDa", - "Zj7DtrKBk5j3q6YY2AWoAOCuO1oZwsBItl51+OZUha1q8AVUg2MG6TOQi7zlev420LBXnfJax25XT2X3", - "aBoVJgLTmYITBm6we2F4zhzftFn6suUQDA/4vNUmieWKpExBgDVYWSbCkYMqwD+Q4puP9rc+na1PZ+vT", - "ucFwwWt6c1aQqPijhTZdjTXDijLiY54z1A7Q/Xurcm6MjZpp0278MpmMJpOdyeQOOXv39/BTRxKO5kZ0", - "EV7XIP5GInCPbY0zW+PM1jjzZ1W4/lx2ixXso029xhmfiY/apshYJ+V5heGOOCPXFr1BdgybEL9gmOEq", - "46LSDzCZi80jFKYux+qJwZRDW1JhwahQmGvjkhEqIQmHtaqgF9JXsr1gconVpfScTQStjecqZ0EmCkVu", - "Yf5MQtMLyFMBAN4muSRMpMFnKRmVyn6O59rYDJPruOCa/g3te8MdmIjmFrTYqkt+5ZO3hMC/W3ei4etG", - "Z9dThnZNZicXhNzXr36eX8JJsAnOOk6crbhhV9uOwvsUF8deFq+IOYzV7hMQe83kBc3qpcWOTnefD9qX", - "jSsykzRxSUiMSunTJunccFyKaRACZPl0Ky20VPXkuJgIj4UR6q6YELZUbFpmQ0iKRxXkRAkrBXrwFJnT", - "C2AkGZ/Ngf3zKURgBv52AFrVye7R7n5IYQ9PXv/t0d3dKNFce5y2ZtitGbbrcLQXv44Gt3q07UC2jHUI", - "WQ+dhZY6HyPHqd16lCOaJekZJAMw9LrUudGhMdwdSnzXwKBTzVCWTSWdakx3ROZGKqdK1dKghBaeqm2D", - "BMHFjOxHVXsynB2zXr1nBSTQhFFthjFouqCipBmR7IKzy2uSgOEgLVlQEd5D+teVkCJeqtJMDmKuSFqy", - "61MjK+95BtU8Dj3EhOYNWHckG+2bBzJ6VTZSol9CZtH+N3qv2bPG9QaYRuesdnIHqy45ZjZtHq5RHOHN", - "5fZAeG9Md6F4DWq3vOS75CV7c5a8z0t9wpTiuUA/8Cm70kCNTsrzBddYMK0zAXBjiBFGzZ1pdqXbDKIa", - "1fyz/tEmBuxZN0LNORQyCMprfNRwNwKUZnKhXk9PmLzgCRsnCSu044bXH7fHxr05fBk1snbsUcnPFlhM", - "z+lBbHHO0hRK+cxzpTvSY+5B5kdMxCl1t4fSfWnWtwNH0K3XBRNQbZmc0+Q9Eyk85MYciqYtFvEjcbJT", - "yizuo3tz/CI6DG1XM5xJalRKO/5qlc/MF9P49iKspRGU12jR1O5CQatyfWEnlpJbnrmQC2XFjNuhxznO", - "ghQT6ZlTCN8F9tGKhCIviokhe7mYZjz5fDlKXbrPBNZvvYhmXKxLZZOSUshbbgCrikg6LyzUmvG1tw1K", - "dM3kGdm4qjxOa89+OTx5Te7vPnq0s/sOinIrV5Vb5VCUm6t8B77bRE875kCp0VwvstuEZsWc7txzSaBc", - "XVqkqkRf5jsZ01CZKGigwOpDM5WD5yiX2j6dTHJxwQRnomm7fXPS8JLVfBz3Wj6Od3/ci4dlo16JNKJB", - "Imyy2sipRlXT5XK3vYjCbr7mZexF4GHaWU4+Hs9uJ7F1IMAYAP7k5Zd4LmNDpPo/KXVBVYfp2qekrmnn", - "C60jW2qWVo8PDvfN1SgVq71NqGiraziaCAxZaQ5gE1g17Y2+n1m1jXrZQG5ee6Re2yHbi7RfrFZnALMH", - "ACze/nEGprGsn7sRFrCAWSu0d7HDAIej1pOKEIWwGGUR0+ycS6ijjOJzG+9BeYPItOuN5+68VZsQZUO9", - "8b3pTXaztuR+I9Bkb45fxGuUAZ/3b5QP9+OtgHgn60uZ2Xaullni5dO1PfsLts24i3gFsq46CsFeWCEc", - "uf3psmiEYnUN4KOmJNOlFF2YtVWTuz6X3EmAG6DFio1xCXPVyVLRKJz6iXKdyInnDVUN4RVnqjEmfDLS", - "3WgVWY7d9tPovbS37zOzj8VG6R+jWH8Zz/1ofp6IcXZJl4r8qpgui19BfhBGvG0eq6acbj51IteSgi7c", - "tkhGlK6ZYXRZHArNhO49FPSBjKBCd467lt6boXsR3+b1arANW7C8C09RncTpI07Wb7OsvizgMB1EFhtu", - "TxPHCJI9dR1sI+X6Va7ZaxtKY9OpH5tD2feY2j4/MsEkT/ZtCI4Zon1MV83opTudh5UxaoE+zho7p9oI", - "MTCa4dusWSKsEQirVBn3qR+aL2MoxYF1i0CBsO5VH08EvnUcpOVVv/9RXvVWQmBfbnMj5NsqnW2E3zph", - "ktPsNqlKa9cSqaW1mKn2c4yGoxQxfibylJ25Xanpmb0uxQsu3rusbdZ3FULhMVdKvh5n8QJDnQp7KEtE", - "KIVkzKlnRgt8cG/3r90qoPm646SYmg7ofmwqf+H4tTbX0f/2G1FuNQXwfkQBvN+hAAJwoQN+D6J0I2wY", - "o3ed+lBzkUaUvUTzC/ZM5ouIin38bO/+/fuPK+TqPM/UiDM9BfwaPN6R08Q0um2r1oMxwFe1xwUQLsib", - "072Pu5YdAsVRRkWfMtzBU+TwKAbrr40YP5etPehw9+45NW27B7E9WC0MfuM1kbpOVG3R3ccrVlR/3DQF", - "NMr9BcGeq2LIeLoOIbZY33jv5QE5FMmoFg62cmyoGDOu6o5D1WIsFf4TW8LTn8XyzP5y9p4tB+8+fOjI", - "xRA4Cno+MHT1AlZGWNuyBb6+RmV1eROmxKcirVxGIPpZu6x195CgOsG3HGUbavY9LUY1Hb8tNzpeuQLB", - "di+GqzHtRqrArIWedekPVe2UWqAar4MD4Qi5+IJJtPesQbwGZTyz9jb/+jb/+jb/+md8jFRIvqByebCg", - "vMN7aVsQZpp0MpWAmh3ZDjhmrAoMX7Dfc8Hid9x8WTW8a/O9Zq2KSRZ9+RVi601zhIhpjkKIArgwbUNm", - "jj+TLLWl+KwuHFj73SpgfFKb4BqJ3FvrXCUjjoti3134Xi6uk5pRynVf5+06wTqZrW4R3l9rMREnVbke", - "WhRVtpsaOQkkhNdwyJ8QNJ4NiavQORyk3Ey04ILqHGTjBe4VSJi21WbgOxPdprhy0uryFYrJsDsf2rvy", - "DTwMjyxu+zL8k78MbziPPz5K/NtTmL4NpWP75nwr5n1LYt53ICLZndpICooZAtbESjSci3/WCu0+a+SN", - "pNmMyLbvOn0YTH5D8tFWMPqsglEt580K+Qj1pq18tJWPtvLRVj7aykcd5PRNZN0fC7S11Xg5KqECSkbX", - "3mQbQNRwIs5LTcy+2Z+gMRSQPmdZjtPmor6fdQJecyHGjqGbzIYbSVatI22BHnL/NvUIK40vuAjKjttN", - "OgmAaYoFjd0K4Y7t0L4t6d//JLoeKwvqj0lqm5FcEGouKWS3cNa1wnce2kL7Q8idryy374QzmLUtq1VV", - "/N3s7Y0sVgxgH8q6QewlD8daILOwIs6CC/zX3YC6VOP7Zdg4LbM1VLM9KtOOQ2Q+k8R8x2MUTo+FBpki", - "Oh9NxNs5ExCD7hMXDLtaE5plwci1w9fctfdsifm0rO/JhmwAMEHEXVXkvMaCApL/6MGqLFo+hdbfn5z9", - "siZpVsApYGUsJccei22h2AWhRQqNLYvonjr9ITgZwSOoUwwR6xVH1hiheYYPUl5zH4/T1NztyD6kqcvk", - "otkCnzMVcxoLg86LMOKOpumZ6RLVemCEn9gySnTcwVynjzjUt1CQQwZhN0UwYE9MHJmuq1ABY/dYP7br", - "RMC6BYZgAUwd8VrVenut8Jgt8gsW3278BllZzHbDA8jODTdNujaxjgwJw17rPKzZWwdD/4V37K5bea/N", - "tetZs79duFFzPl37BCQA9sS074MMHLgPKk60ZDqZd+DCfu1EBrvSTKRoIql8myXqnTHCWceewuGvh741", - "KPCgRbEggJS2y4Gu2oig00sUAte6CIMuJ5pqnmzS46lLAtKSZIJGRLNFkeHzLhlmGppygSHgrGoMKggl", - "RUbFaCKeMapLaTvmCw6Rkf6lM4vMMSQUvJZL6IJzpM444rn5aI1f0iU36Y8B0F4B4f23ZjhQiPENtqbT", - "hxnCRBU7tfiIXJg5NcqBTQluGXsMlbE6Jt98vJwGnapKVtNPeLftO1JmWJMbqluYMWb0PQV/TfEWdoXt", - "2c82Iy8qily5I5Xat7NNQ/r4+D/3X+0f/HR68vOD4+Nnz/756PGPD5+Nf77Bl2AWMEubbwZw+9eO7bvz", - "Hij5J5HgY96MY0ZTUMCtogHejSrS7dMjee3jms9mxLM7MLI5Ray63mEir2IBjapmkedex2DnGuqcyWFn", - "95PpZ1bh6oejgLqDZtVREzpQ1QKKXjOzQe/vKLJsU1J+zAy95mK2kqY7wSGk6RHMblhABtXd4LDWaFRI", - "aNdIhE7quM75qUkH/QQ3lMmsUNQ8WVsJYSshbCWErYSwlRA+kYTgTBFOKX33PQeKf13s3HLslVz95tg5", - "mkwPRVHq7iQyUDkIw3kiDLnFj2+GMk/EAYccstX6SO7/dZiaPg5v3y4Zv/4qPyPN/yLUcyNSdAPXOLgJ", - "HTe6dpMb5bvb+k/v7PLBpWzexutaYGvjbGyNvW7vGEmJpgpp0JQ6LblRG2kNlmvYSxv9N7SdNhDZx476", - "o6RdMXeQ1zKSCWDRHaaH3wytwc7kxKeipKTIFdf8ghH0ebfDAitum5fnmWFKNS9602G+LR/05ZUiNp0y", - "yCUQW8mB+wiJHuDqwbFQEBZGRTLP8d2qdJTRfh+RI5c+74JmJSOXPMsglyfjlpfBzYKU0lyk+eUJ/52R", - "WwsuSs1u33D+iIBcdIkYVpQOPQygk/hIDcwRy1WTjG8gSKzVOdhVwa3Lr7/NxPdZKVsi+NUEKGxyDAKz", - "MzM17qAKPg1SMAxTnzgB0jeqN9Kr4zzL8gsmxwGdtYni7zb35kd7nSQjMs/M1TA9CYWktUwPm0n9l1Uo", - "HA0rj9AM6vqYAwKOM51jbV3oMqeGgE9zK1zCyKOJeGo7VfUU4Is55AnNkjKDQ07VE2JbnkGyxLNjaPW/", - "5OXhq1svm8sdkpfjf91yHZ7CrNhjSF5yUW98+3YPFtJiGzcqXFaXww3bSHuCrzht2nVDPgYFP3vwWo7f", - "z19cLPmc54+Lh7vzx5w/E0+BOS+ay9wegZs+AoJdaZTGmS8u0irOya50k3IBG0JmdcM8ppA8l1wvO+OY", - "4atT561wZbce1IE5nxmtzreEKFOI80vJlEtltuvIfYQwPi+OpSzhC5pZsUyNyFszYJZfMul+I1ykUFdT", - "zNxMfFHkEtLRjybimZGqERtDDOn08O6a2Rbm5JRyBgb3ORWNNvdc1KLRTLFumWIXTNLMCwwXlEMIe1UX", - "lS68oovxjWqpNFsQxaoEfG7brL4EoCvt5x5NxCEWbFJG0pLMTafm1KnSZhoPa8YuWDYMhk6yXJkRdU64", - "ViGHdCILhIK4HTi0D1hsiSh9mbsZ4UIiK0po5mbkDGWlkPNSzVRtwTBTqcKDihXgKinXAtB44VPlx+NC", - "/y0MYb338GEgfEcfA8na/blJQ1Y1csOKZRWS78QUeJEbAbenzGTAxg43Snh6evasylcX92sCp7UT1kXl", - "NcYHIF+hFaRbC7XpunOBavxXrJT+KRSiL6ZobMXjrXi8FY8/9RHYCqNbYfRPJ4yud8c4r1pDGm2mVl0r", - "K60Ri1zkdPsdpH3yWIskt9Hm0zJz9SPDkrJmI+BEDTGi3BZ0I2VhnUuY6pxiQnpzbsx+mJFNK6ycdOXS", - "o+MOq9FEjLE9VyQ1MC3A7+yypntPJM5QKniGXlFQS/nM8bll8DhBbxqhWZZfmiaTQVU95Rzr9GLKdHc8", - "uSKTwXkphSZpfikmA9cMBrq9Ddj6iICtSO72bQDXNoDrTxfAxdVJPtUvuC3j6AXMKc1Uq/rw4ZQo1/p/", - "zYC1vTACpeOIbq/YBfNJf0Ovkdm3qzktlWbpkMypsqQW2CrFqiznjJg5wohnAyvJANhY8WKu3gj4ytL4", - "YgrJEgpfY8WV9/33IeEzkcuKMNuSiyNylDEjR5h1BqgjXCjNaPr/YPVQeI/jhRF8tOcfLk1LDMWIL0DZ", - "ksYg6bYP1L/zEvCMEodlKLVC0DTLxUzxtPUaC8UXe9yISpigkufk0tdQdJXCKFaDNH9aZoblvowEiSYG", - "HhaLNyKckT8D07EbzbDcLnAqAbEaCocfTcSpEaWCAVFQ0z8oUG5As/E1W5NcTPmslIhhSi6h5j3VVh1h", - "NJlbfcSnqBnaPUVOba3dUNOnVj3Frra+1NFEvISqktmyQpkq4dWihRgwumCoX7naaxMrMU0GQzJpa3fm", - "ZyN0Ttq6/2TgHnhRxK0TkWu1P+JmG5eqWHDNnWBPvOjW0oga5++opiDZy7TbvjZTLlgo+3vR3ekNrqSb", - "D7XYRAp2a4AK53YFsLW4q16LiwnMGVW64yrVrI9gKsXx5rQomPjkhWsWjKpSMpB34uUmPIAg0qLmjjfe", - "KHfYPR0RW4ivOqW58GbEocM8CL3h7fOGRjPDJ1/qFwhzgzLd8oK9NirtjI3DY7CGx8EykBRgZ4NwN17q", - "bSqAehyjksoxrtCcI52Tu/WcOziAH9SNE+UE30GMswsK28Y4b+Yaes7WxTZH1JdPFOwcUtCojhYhZHXM", - "9LMC9A6XlhjauGjbCLbh0t97uPRWV9nqKltdZaurfKe6Skwj6CsuN3q2pYpw4Z9LqdiK/tcS/TeSo7+V", - "BzobCYWbZcIO/URhMru48BvDYjD1N5APO8wmtU2J/TlSYreTN0XyRuIbpjUZFYD/x9f5j5PXr0hBpQKP", - "O7aM6X7k1IhtGB7FFZbARYnA3EijL0OifcPLQ9psfZ+QUtolsnTeVCeWmD6GTezMJAVfp+3k5RdrX7DE", - "dli5UVGgWealJPmlsC7UEXlOoc85ZPaLlMsc/EEmuF0o7KjJ4An5ZTKYcT0vzyeDd+RDyID/q+Jp3rZ+", - "z22iiq2fc+vn3CaquHEjrn2Zu7XhfvY8FSgqfPqEFZEn1T3yVbSlna2w83mEna1Ze5sF5OazgKyi89+O", - "jcGSnDUU7zSeH7874WLTEjP05pphJ+KGg6udWb6zytbwsyFrkdczzbhXUHxzCdC9LpgAn5kjVwsq6MwT", - "S7Z0uZirWNepS7wMdNvW6BiR2jQJFYZw2QUOXToiqEiBK4wUdEKbdMRKYyTBevB4xF+nRqQz0ve85Jkm", - "VOalSDtiajF0vB6DC4G6aZnUMkvXYmpH7gkCkQzMesIGrUu2oFwEfoTIURiiWR+5kWAXTBLDiRQRbEY1", - "v2B9XlV1SKpBuo8OthnBapsJKzgEvdlrgz29Z8snZDKABU4GwI7WCtbeH9aG+O2cAfENifScquBohlSJ", - "2GTWNElkrtCBUEtlvSwayRQQog4IA4Oqtbp+xEG1luTmobFFeWzcv/hBk8TMha44PHBDwkazkXMrVlgw", - "xxrsUY0jnE/J7t27ztxlyeF5aR/gXJozD4oWjM5S8re7Q/uAwzvH7t11duYatq53GgGqj8DcMcMrAn6H", - "yHqbdj0fnh1Y9q4BeIM9VIc0yhouWMz4uJflZQrfFDmxNbOR9sD1OgFONxET4YusVfQRqJgrR2aOdC5T", - "W9vJLDccWoVDP5mI10enh69fjV+AA8blyfeFlBR5Of43emrtUYSnVYTCbAgZ3N/GAzSjtQ8eJrt3pzRl", - "O7vJY7bzIH2U7Pzt3l8f7iQP7yX3H/31/m56PzEsDbQ0c8uZvOAJ27H1rgykF0wqRM/u6G6lgIS6KebH", - "5Ys1sWR2GwqZLwodZHGy3MVLRF6gOQq/f4jJEOwCbcPLLKfpqNqYobl/Fl1GIViUSuOzWMBXJau3Csg1", - "j4qBKsmFZkLHq+zs4cda+uZwt0Egww0icIlMA+QokwG8HcODcMeI/5MBKj1Zfuke9D0/PT0KRZJmF3PA", - "K5Le+tq5xCBlE9UUpbj26nwxVbzQ2AwJICyMpoYUQX2mmuNU8kFTWl4LR8zO1Jgf9rvOxHoe8UYlvlal", - "FHsD1swPJ+FKGyKGnlQq7BmMB5E27lOInx3J4C1TwnpAF97DwKlpr2T7XtjGsfNYoz7V81C7jFI18xfh", - "FOsAdEThj5YX2vzr3B2f+kMznNIxBIva2rdC5mmZMEluecsZsFrcrsbz7zo9WgMxkqt+Zqw88Xkb/DaT", - "l4ak4PE3RP742R65f//+44+LrF17R7ppEOXCMAWkLPj53IV3ONqESJUM3+da1mQjSiBUpFppA7X5YmT/", - "NVL5gsFA65DcLobs71n9SDeTq7d5dl23QipwYGHwX3bwsSwUvKMGJGtoGSX54k5irgB0VHdU+n5nlt+5", - "uHcH1wGZA/0zxv2ySgEQ4TjBG1HbkABprij089dvjgfDwf7434Ph4O3BwU+D4eDl61enzwfDwb8Pxsdx", - "j3QzjcCKnBHxLAJta1ynhxWFJrhqfAFJ3rR3uAaDR2Sz3Xsxj25aXj9rgkd3h5VAcO0BdXaNCIzN0xYU", - "iUJExORAW6Eo5t7wYj8NTE9UO72ZCXNNU6Mtp1zh3wY6X/wI6vue53oOPyMdM701zfIZvjZuRDE08n7I", - "ZM4vrm1sd91vONDfGtrHMDrNun2c2wyWX9xb+m267d7HDMBfRY1OV4OlyoppgLLiiqURn8DaG6h0gBs0", - "1oRFQr026mf6YBP0/ijzsni6fMYzzaRaoVzFbkG0qjgMS2ZmXCOHTXFkpHfTMnNmD2ymkrwAG925zGkK", - "diEqMLuIp6mSJu9N/4PO0F9qR4OmEAKcZUTn7xkGdIO5eIYLdaGojk9AYfrhRGh3Vd20CQyO0KMtw7T8", - "31mhdx409Gj4YmQJ8y0M4wTLdq3keAQzsbK+sJyTrJzd/EGvLi8gSJ2BBeaGbwCuVJkFRI67K68e3pd5", - "pLj6+ovz7bube2YhQ1eT1RF5ukpUWe21/fJiy5Z8b8n3lnxvyXeT9AUkbgV1MzenjdUX+GiqMoCj/A5l", - "zdyJqEg/GLS4SLIyZQpdJ0a7tftRybqK3OLp0GxYJK9OTHZ+0xyhBsFnCJmwO2JxRSw83kIpB33FabOn", - "7qAKwheLUsPGlrEVhvcOj+9c5uVsnqOLioyPDocTMa1SkyE/5kIzSRONiRv1nFBn/ftBtQP4PeJmhX5w", - "hoc/smQMdOphZnrfUajbDrTZcwPnTg+t8DBL//cGdt5v4K2BM4ls3xl8jncGzzKqjySPeR7MJ1KYb6uS", - "wvaTSF6VCyZ50mFisy8J3V0P5o2EDZnPkSMej86xcK5c+Vuu5zZN5imTi1WIQEJSYGOimVx8UdQUdah7", - "RvCb7uF6cWLn0OHijKYXFL1CkRSVwdojUE3EfvBQjwtix/q0O5nLc56mTBzJ/Dxji5C29cPJG8GuCpZo", - "ljaH6MhXyOQFk6QUKZNK53lqtb/fSqY0xE5INi0VuCUJLfU8l/x3c99HMXkO8ns+LaXYzy/Fc650Lpcn", - "bLaIhgiMicJPtWSJ5LyUAlL2kTkOMJqIiRiTGb9gwneJBpOAEGFHYfqSMetRVFZxm1MxYylh3EfWNKes", - "cnwC97LCsxk9sOBHI7nG+kB0eBrCQBwXIGVLvjDhw5pjHoJrRkF5kE40lRHMrwAIXoR/ApAA0TZ8THlc", - "delgPfLPttHsVnIuGX0Pu5lP8VU4xXza9klxB+afYHbaw32fabeu/dzd/fHRw//89eHD8bO345+eH+ze", - "e/Xvu3v/fPzsOWDlQycSquvRQILfnS+Ihsh+fy5EwKutaOSbUTtsGk8I2qKJxnf4VT7PRpAXFeDLBoXa", - "JhfoK6X96GE5Zkku00H3Arz41h0Ud8EkpsZYEdZ2IxequMnnbvUHFpbGjlaEsJ36iDRPeYMKVuJmqUeD", - "jRYueQ7CVu1Gi/B13LhhnWZHiVP9jL7r4nWbaT/B9l9P94E5v61X1lg7cKsCfQ4VqEXK2oYXuK32a/NI", - "wPHsehrD6xVWGiaaTo5wc69aVlCiWjSsJw8bprRvbIJDhps4hu9DMWNKYzDY0zxdblAdFYNlhn/0vE8X", - "0XwFUVp+nqfLWuSXcuJ89aKHEsXFLHOhYeC1OKc6mfvIJjWqFsjSjiDfsWHD2MKOBFpl7kzkFzTjqY3r", - "kTKXDXsyc6N+A/G1bp1jvbqj0Vg6W93DVq1wXY+IXmcgBCV2G8CJZgQin6DT7g1VfrtuuNhLtepNAcKe", - "NwxOde4OzLGLQ9U8nD57GcA2pVAzp2o0WmstdYF8wf4EmInTD0MZaXYCSjjA+rkVfyYgpAsEVCpI6Uch", - "SS5QK0FhtpCwPgaPQuF90LTMpjzLXGCkIzKD6EIv8qhlzn4I1XlqiAr+aim6fSP6HWbsT5b9N3jP9tjL", - "09ieus/og84yj8SMCyucgCHlZZlpTtz0rpV9c5FrosqiyKXZ5yVDFcDRzv6gPsVjcUSljnGpF2xG7fOk", - "JZEsYdwnT5vlearg3RxSd/VdJd2ogf5Hl2M5+Nnxce/YJC8xfRrZvXvvAUnmVNIE3M51x6b5GsJVzROD", - "iiugARFtYN99IniosPaG8nV6bNgz1gCBN+5wmnrrCW78mH6QSjrVb4Tm2YrszqX5ji8VHc0AGRw6wxO/", - "Eo/9a/eba1cVi2vWWvKPHy9z+X6a5Zf+VTuMdDglC8gLaLAg8wuahQ+hMaVZBTuCyeFl/A1zubSM1o/b", - "Ly1unE0byXRoaHU4uMWn1Tu02584kTW7QmZ3uK/6UxLLH8ZFcRB0b5MU95Uc7qvmKrkgOUq9RaFsBkdF", - "TqCoWLSWScxjPY54dF1sRTzs4FMoRV2U53A/nvJVlT2KRzo8gXwIXeCc77OCCXh3lwtnKtRlC7uQBzWh", - "AvNgLgx3KTL4WczUk4nYwcswJDNqNoGL2RMSn94mFLVPjn2loK6buGNbdg1XrebTnmvDX1Us0kLBfQvZ", - "sKrkHEi6QVHh0t56oPKsIqqW7fYmpvauvOCC9bFhfrbMCeH1aD3KqQJpcOiI8GgV9E1pxiur17dgxQ8+", - "PSc6kCAuh/i4HMgoZAOM/OMyPOt2eLgj4QMQeFjMtCJFXriqfb6mnzsFWASQifCi2UzDItfWbqyrUbki", - "t9LmRSwLpSWjvlKXuu1cWpZGWcxPxOU8zxjJ5YwK/rsN9Wm28gcN8hVwe4fJLay6eBve30J2XKbLQrWm", - "sJ+jhNS6WDfeusCnGyP2hwJvKiwHkhmIIZnnl5hYF4ouuvQFFu3KF3MtKMdEbp/Cfh5OCVZ/BblO6wdA", - "EZEHQrnNiwCitxW4CyMTmw1vU5WfmBHZq+VLNqP4ONroZzwvVSDRi5QUuTbEBpwnKdOUZ4pgpp3L+TJ4", - "Fp/kUoLatym12c+T0uzVMZv2ITrIQzY+ECfYrUOTjfElez19jm64nkkOb/MU2L8WRYZvILH/0AY/SmYR", - "BYmKKky7hOfYet/iEgaPnv1au2su2PXuypGFMNiFO5OzP/Mo/EZhK0F+vzmNDjgwvQLSafU6mGO5Wq8D", - "Q/fmyDnFbm0wTsrFgkqwfkJkbCimQJ+hjWYEsOgVU+RWJfjfjuLKhXpsBqHpFEFT8K6dN9iIe1fqAPZF", - "E5E/FaUsctXsDXd8nl8aJaaicXMq0swylxOvzkMKEBDIlKYipTJ9QsaGgJQZlUaFWzCZcFoZDlJ7tX0s", - "BSXu4MC8XkAxY2L5xzPDxJ6QYzbFiqYUokeED7koqIT05JBJzOqMzvfsiJ6fd0TGrqok8EZfKzNbkr8Y", - "bUKk6i+uL9I+3zW2k99FPXhvj4Qs6RG58+fKrAkyBsiceAJcnUwnIVuhujfJ/7k+eR9637N+fSi02wr2", - "VtWOfx3Gyi/Y5OF6zcCfVhtwSN2YZLy1HU+sTNdBZb0mFMvyFdKUQ43pL6DCBiVK0ELNc28CaGlULiDE", - "mQ6adhLIjTQRiHKuKieP0bNC6sOuiownXGdLZxJ2ILKrwtAN6xEfxcONux72+GftlnUFdsnAmup5ihc1", - "mpz4Xbd5epzELXO1z83IM5qgfz98GlQwaU4P6q+VPbuWesRHJqIVCWMUDUGEU6alWYs5sdE4gLhZpBPw", - "WjPIDgEZDvD59/UNJ3VrPE4WlVpP6xNF5qn+Cc9aioKEpqlRn5t3VCkb15ndhYNea+5TenXdeTW9us6c", - "H7qPcSiS9/cuAKN9lWv22lZFsaOBYB9RwZpThU9ybMoMhvzfKc85ZHi54kqHXJ7csgi5vcpzFEwUT0AY", - "b2fz+ala5g4/s3tJdM4MQB7StFEHAeWalJ25ejFnFuJVV/MAaF0nnPi5YYMw0lHbvpY7umkPTAaGpVIX", - "ZS294l8GzhQVKpAVQxqZSxzPtGiG2LmgUtCFucq/mCOzZrQxDFYt91lG9TOGtqeuNQdtav6+Shn2OxKz", - "g2GiroUryUPTlKVkyiKUKJlTGY0s3MMPdfcFVwDAiNzK+HtGbEUaszUivW046St2SeyQjsDj5Bechlv1", - "g/LNxkeHQ8geSROecU01mwj3DUsWSUYoyrNiVllNAeW95TGrlBmE4sr6SGTJnGepZB0pWdBKiZql091g", - "ZyrVDTbnUxklty7daCGCxEb0uLO6dYp+FU5RayjqICiOdvih1lGPqmGMflRfb46CBLczdMWuu6Uf48oz", - "c315dx4ka7n1RvALJhXwE/sE9AW74kk+k7SY2zp7J7nEJ53V69Dbo88f/sirEJqN8H3sU+PFCUzNjwek", - "/pxBKT/IQ1hNvEaHt4ceR6iUQdv5pgO8vh3fFY2lxnseeQTempE8tWa3XbC23Xv4qJu03Xv4qJVAztE5", - "roqMLokNk2yh8jO/vDuKvLrzLK1g8o3genxj7w4BztDFamV9FGFu0gt0VHtBUV0F5AyYSjyXBILoSrPL", - "ST7DZHOkkGWRK4bRJVamc4YbbYQOZf1L4LrBBzu4DDBmK37BbDaR1P7OruzvsMbfSgom+ZtA6D/tWKtw", - "ek0fj2EMnX6ek5qPx7NXzycMqfbWLhQDMXYTGeLQsgzYFzCEA//E9O/OMDoR5xb5TMxMwzBjfNw3QK/2", - "fMLxfos99V0i5JheuXTjqBguvYXA1d1ACRRpRSgMgjMjQqDBx9GI1qq7RK4jK5zSq0PNFn1EhZt28eCH", - "JgZW+G3CJ7pnU8a+02o8DVOqpfary984A2nMeupfUVTs39tg62Q6IDArbKuB8n/MiowmDJcTS7xkUYsA", - "V8V8MTNNW93/OhWIrdi0FZu2YtNWbOotNn1FwkR/1hlnO5+IeRxhGBzYO4GxrTM1tzo0nXdWUgTGgg8n", - "RP3dxA0ZpD+vZdAB2PWU0y+gwX9Cxf+z2ze2XHzLxbdcfMvFt1z8a+HigVp4LYZeY0QruPuPTBiEN8IW", - "GgzAlnLCrKZPJsKlqjEIstHXPCzBAt58ydLK2w9lw4SNIvTvtbACygJRKtnMaPtwoJAWm3MJ2r96Qk4Y", - "xWhb/+4LXoqhZQlj7BUNgoEWhvAwtLuco98e4trYlX5CJvrgSjOhfG6QKgcQSfKUBWOcs1qZzQ2U34C4", - "++Dvc5dssjtWMkIoJaMqNsPz+rOJGnsWNsYcXse5KBCuCJR5ySXgxhV9LRVLewFyrXDcZvTI6shcf2Lq", - "ESENC1Mst9u74EVW19mOx8nEAmMgK4MrMQTBIRCXp3/AEC6X8LPrWrlYjH4JKWwnyA/ylCqWWo99r15h", - "9Ecbt5aqB2BdK/zDPwgLkHKrFFzfrlI7ptxMvOCCanz2v6BFYUPSPP3rvxab++MMpt4Uc+6iLl+BGIT7", - "9KG+Pz0D+NpNv9cgvq8qkK7mFl+1N65RI42BzXjZrqpqTjw+VnKxy85Ef86muWT4NuFTJuR8xq8Mb3Rw", - "W0h1DoAsw1cRUP2PyQRLiMHibqOWaVTTWFUUlQtgYaNtNZtvMOLmlF3pGh+vPRerjgxURsJTO+pbMqe6", - "uxgMZ2sn+AeEn/nxdEsbxGO+kUJkOtAZiytF9qO5QlO4cPaeiVw73P2pinOA22lF+tuApLacRB8hxtTH", - "2lymafTvCoZuNW0lqcVfO62NNy/B1CG/vjjTxGAf2ebEhwE0H8YL/2azHv+s2k7+IMAZ3PlgUjGaDGT8", - "yrheFYNtXdVP2Zxe8FgaqHg7ryvN80svWYB8ylu+dINKl3AUXt14o8SCUVe52XRXro6Cj+Oudz246uyI", - "huXIhGEeSTcvEAD393rcgBs/FjawZ40OOpdVvdaGvYEChBkK9BkUcbdR/s1T3ciYHGzIxiEi4YZGrqJq", - "7JjfDyiq4P8xjSGzFUOQ3LAlp5D5BU+ZrOMy/nT+U/Ci2nOIouJPiunKj4EXAN+eoswKVWOINLTrPWsJ", - "h/C7lwzJmAieeYkRXllbY4YZhitru1qc5+Zs/+Uv7IotCv2Xv1jpmF6NJoPb8UfLEqWGm5B/T/IFlL4R", - "WnLms/eA0F7ZTPyMq5cctQ108bZXPplFlBS98mkf6IqEM/Z6DcmMCSapDkKYavqXf1yMQwmmFMFsEgoV", - "6QwfBE5ponOJj4ONCmXfBIJ6bUAoUH0MckeYX5xmftt08wHI0N9WLlLkVvi7cvCi+damKfCvFxVdAFan", - "/Op2TY45fPXzTiXL7NzdXW//76B6nel6698bfAlywUP+jSCXb0XiwGxTezPkHka7MmQuD08Yc9M756/P", - "ifHVZ/11Wf62yX4/R7LfWK6UyJFAj5M3F9WTgDgJpytPSvP4aDdLT560Oo8LeFDNN0OD3PvLBo0brbTQ", - "RCMCrqkptMfaTFOI9F+lKVwvIOFmVYQ2yNdTEWKoW6ciBH0UvqyGSoztI1w3HwdNDZfEk2L+YZCFb9UN", - "7xP1t/CtnH8+VriyKmeGiS+Jy7VUZehxVieXP8FGCeNKDfxPl3uW4k+Ej1YckYNFoSMJNiGNYsyVQ9Xr", - "6YowA6rQBuA8XEHCQ2cWszkTzCxW1LT5CB2FcskInbvlBqMSegedHO7DXtmF5O7I1+78F3hdA8pZeCjj", - "y4gcDygPBN3rRnA2NLJiuBkoYGVZrfecajKnF77XGdVkUt69ez8h5kRUefGs/ujGwKTneH6D8ZrNSVmA", - "UqZeT4dEsEvst9PZT2kIiQ8iMvREOH3J+ueTZZKxUCr41h9X1cWVpjWrlxe7emcVsYnX38AHx3x9qURz", - "6Fo+j6/AWHrTWfnCVHqtta72vfKVG9Nlh6p99q7YpiUqnr3D57Ic2Dy1VsrHX1DeXyXMnzSTg60AzaUa", - "a0gKjexfjaxfUDLr6NAQeomsBxJ9S7jbkNPQaPqWWrmilXcw6fkdekEzbn4Y29wmtpYseKytZQBtAoJd", - "aaI0KyJuR6UZ9TFBmK6JpRbbPm1agwM6v52dOH4b1mZcaRyeTXQXmwLmQ/zNa7WCNmQH9rs7O2HuuJZM", - "2+N+4V5EzoZqOj+pS1ZvZmZ/7x78PM8zRmF1fs/XTsBSDg37jNu8l34Sv5wWHoftTV9xl0/9a6Loq6Ca", - "U1xBMjijw9t0cM6G41X4xpZ8yuKHWCsJ6lXXwuRCf+8weAAO+dXyxYJrX9i1bZ3EhBKw9psv0tiG1T87", - "T0vkZEHEEoISBdMv6osB6iHoesTHlDe/3yiQuOtB4Ut4jlc93wfDviFYOfj3bMNamEA3yN7V8DlBbjox", - "VoP4GSDr8RDwkwHRPnk24e/mt7lBOakLpqzd8dZdip+E+JGubYnDyipSuyrNEoTLNQSSRgLLT5nYMpDE", - "XC5LNKm6FJSrZK9GoFbXEuvNPi5iDVSubZ6ibZ6ibZ6ibZ6ibZ6ibZ6iqKAyZVSXkv3ElnGaZ79XNQJs", - "2cPKiN04SI8eNP2ioTGI7vx+d+fxu/9z6+9Pzvw/bv/lf/oG821TKG1TKG1fEf5Z3tEVEigiQvjPG3xU", - "Zy7Ab7GHdfBIhgtvInH34we3kiDNtcjFzu9M5qZ9QlGbKGQ+k0zByqzjYuiEDCOxz/NLDPFblFUZHiSp", - "ENts/YGmK4uXeIBnJ+tY1zHVbI/KNPCWShsk8dvnQGP4PrGzTMU2WdM2WdPXlKwpDELY5mv66HxNQHBq", - "AuYKw8+qyO9tsqatgLYV0L5SAe3jhJGvN3HBamZwjQxEsp67fwUF7J9xqE41sfFbrucuMuxmMw+ttSxv", - "Ew59owmHvmYj0JZJbpnklkl+P0yyb4KftvrQN7VPq6hZF/tsNmyyy3a5MjAP1SvaVTU/4f1UkuWieupn", - "D1Mh8ynP2A9q8wpoEwFPlTwzyy+YlDxlEHekeMqiCXqg7M7GdTYRynFRqNdynfkZ/AvAD1wMr8svk8tk", - "zpSWjfjqYPFxmxDQnTooh/vtvYu3c2H5DYxjPiAXvO6Rb/Rxz7lcyIDrYsQfW7dOo7zT3JOhDbnAkbmP", - "B6SZNttBuMD3buBA9HHMfnytWDb9CoJpzZH7PY9FI5zaLw3v0g+KgL6NkZmjT1OZ0O7sppUJXWRqdUO5", - "6h/M23H4AvgDdMVIzwuu9IEArgfRNsdMQWK+aIF2FjQ0HNe0HA5ywSx6ehnbgtkikaO9+7Zf+H14Z9fz", - "DEnv6rVY+nz9ddhZNl6D7dcB/0sq3zMNVqQX+FYykqiMLKpW/knlRBw7LgAvc12gKKb5QcOe+TPsGwYF", - "c6E0zbLKmBoWQgdiE8CGZBTKREMqLnAlWN6cY6XsNBc/aBvKDON565c3dnk68scgoQU95xlHRvDLHy0j", - "ueQFg/x1/nExPo4uchmqG+4BkRn+vVELBliZ/cx3O9P0auBEzMGe+9mMXQl6vrX51exoFBz/WslxOfs+", - "Ny3Dh/I1MNyzFd+jAsW9u9oLPvnnkPCp+tIJkn0YaLhshlWF81JD2BdW7UMpEqC0PRwkhkhiWk7/unDB", - "9DxP26jEoc/cXAE28Qs5qr44hOIX/yHmB7E41c4oCm+/FFnmJbx8smP7FQaLAEt/kos3Mhs8GdzhCzpj", - "6g6COyrgmYGFENvXJfoifIHnbAK18/hHXJD4QZGwXW9/w7go9ly/ZSx8fnXOIT958Hs8q5BDSfcQpgl5", - "c/wi2j+uhlWdzffR4KPzDo6LoivRoJ/KP4hspREcOgE9rdkK3NqH9a2M8cA2zTX/idHdgs5AtkCeEck5", - "1vfF+EYvxSM84QPosYfYe/du8HK6xyNyWAW+HhoNNn8qXr07ii5pgWYeB5aNvOx4lL7u5ThGEDdmjAHd", - "OBntp+G1l+Pd78RfMqpKiQbKZzKPpHuxLawpaWrahLLDamtKffAjw671Womh2Q18ZCgtxAd80mYONh/m", - "AjtgxkzMzxCEB++9OT4+eHV6dnRwfPh6/+zkdHx8OhgOXr1+27MUKtpFNdo0YFLTPb8cxICFZbRA/eX4", - "2d79+/cfv7s117pQT+7c0XmeqRFnejrK5ezOXC+yO3KamEa3beJZo+94yxdBCM25fHO6d8MmtJehCc1b", - "wI7q7/5XGk8HJwy24j1b7mBMfEG5VKOJcGM7icwpppBWKHxAEr6WwhS1tGZyC+QqH9SXgrb2ePfBvSTZ", - "oXd3H+389fEjuvO33d37O7v08YN7U5ak9x6lg1YCAbPTs3zH/rigxS+4snc1rMTStIyNBOEStNRtNCB5", - "ugQ7kFghJwuqkzlYpOhsJtnMSGVGYEFCGyzKfbb4fPOylTt8fEhO8/dMEDhtprcZB6P0DcleFGZdM5mX", - "BSY4AZl08GTwPyP8yyPhf0bIejCsb7XCq7JyNngy0GZmdabt4wHYZHtCljgiNDBaGhdpfomkdvDy8NWb", - "04O2KFJb7QaGWybHQU/DXKt7YHC2Ts4Yx8z5CxcxUo3VwvWa7DLBVkRzl17A2/tlgc+m3Emoz+m3cM1c", - "wQ5f87a+oguWkn+cvH51RLEqP4RJwZPK3Kg3kiZoCYO5jAoPG66ql0m4InOzQY36iS0VWZRKwx3HKFB8", - "8yIUVKs2WhXNijkVGMAEX0uRMqkSQwkCezbYgF7vv35iyAPkm0LKQJghEQlq2bW70zrWLRYYC18dr8iv", - "FDkSX8QshLevC/IhmdfdB50rmYiXZnOusx01JDTIwCfxMjVoS3PxkWPbPLXIgvxZ5WLGlGGncGjRcEaJ", - "y07ibY6+me2eS3Ly5uWQjH/+cUheHr7CfL0vx/8iAfWylmYnzUHCbmTVtcfJVFq+55rCrM9ySd68Ovzn", - "m4OzvddvXp2GAw/roCNM7oa5SUbEDNHqWyHBoRHSD85ELpv+t4BwryE7IV3vS7HfVn3qtNrxhfY7fnvm", - "hzUWUZs9pLbv1jB2w/fUCFl58GmHL4pcglBZULPgwYzreXk+SvLFnbxgAm4Nz6u/7xTvZ3dwOIC6xYvi", - "KmW4J5b6l4pFyIyVVpHvw4YOhoPwbAyGg/HPPw6GBnXm/4//FZdf44sf15B503joioz4vmSlrSS0lYS+", - "fUloK1FsJYo/kUTx7QgT/yyZXHa5904xHKjMwMxCLV/9zXRp8EY05PzyR4y5zQq982BHl/I8r66JJbaQ", - "XxeX/cTHduzsOg43eLJ7zyHuQKSh2ene6d27T+B//1PhFuxkdduUb2Q2DmyMHd+HA52vnQC56v74322W", - "6mxZ/QzRFe7zy5jfYhq1mH7lJj2DwG8M5Do16EsDGtcdtj5uAw+3OcL/ZH7prP79LtpXfL+aF+I6clJb", - "cHDQ/9HBYIMvNjXch9qKvs3ziIj+pmBv3AncnPqCwo3ZgO35C3Sj7O9Vrp/lpUiPZH6esUWY3rqfUPBG", - "sKuCJZq1hoi7X3PJZ1xAmhAmScpTyNE55Ubz9JlSffxhPYObpnLGdPWcLJf4/BRj70BMw3xTWa5sMEou", - "GEaUxKu1vcqNgJ3ANHtzKgTbJFlRu/Nbdj7P8/eRtYeNjUBuWvcFCXX8Y/ZbyZS+CfjqA7aBfSO81QSD", - "haGhqlL8CnZp8N5aEQZRJExqynGAvmt8yVBwaDpHrQsLdBybCRGYg+jA5/qcnj4NAkZKdg0UWp/Hx/+5", - "/2r/4KfTk58fHB8/e/bPR49/fPhs/PMNWp9d/hiLR5vNoUrZ8PFhERGkd4RJxM6q38x1kJ/GIivAuKij", - "gn78OHTWCoAP5HxZKwcQ20NVq9CSVhHV/ZP/R+D6BgoBxGjatijA5ygK0HXD2vAGBU876Y89um8Pnj5/", - "/fqnnhETjgG9i4PjPrcgetVJzC+xi7//jbi2bzoVl9EEnjOaMqk+wpCJYZTk+enpEZnjaATDZpUvHAth", - "9xaTlp0CZ3SwBkM4gCIH7LvJ5sUVPfcJdm3t9inNFGvi9u2cQToKW7YQjiWHJFgwAEHiX1tGnC3tuymj", - "CXm/azEhHnb5RjFJppIzkWb4Li0oD9lenVeb7SketIF51fG2TfGZ4GJ2whIZDSbDz0TBd4xSghoF9euC", - "SUqoq26Npzth/ALTkKTOBrug+gn59Zwq9ujBr5B4OzWsmIo0X5DzpWbKig6QHAsrHrEUad2vl3PFkrNf", - "R+SYJfliYXNK89/ZE3LvQQ0f2PLk0eze8xfi9DJ9PJ4/v3xz+PLZbPbzyePX0/yITl/9rb7zt7DT7b//", - "Qnd+H+/85+7O4/9z53/f/XH/3nD37l18KGtx6pBikbZC+NtAdIuxlJj09l3m/BgOyljosuWI5M3xCwO8", - "ZO3bzpGc1wF3tgf7C2jc7asRjP5xdTvroclmJT0FkKjGF8kkgncMbgGWdCmopGAyUPXqLqtVvzXSwrfH", - "cb8yTrWl5Vta/tG0/Oumg5uTuoMLFtUKu7QscDtGHgsLkaPFcYM3w+OgU+QRUjQ2u5FNjail0mwxInsA", - "ATmHJ21GnIMWpYrlVKtwW4OgZ3Jkz6bbeAkVM6NOHz/bI/fv339sDekfZy3/mOrv/ILJZVcBkFMoyoJt", - "GqWM41u/sSkFDtl+HYwPK3UgBMaX2mgaYPrGxa5cRqh+/OPeT6+Odv99+q9/Hv/r+en+Px78dHT816P/", - "3L159QNwsUbrKOgyy2l6PfskTHBkRzDXqvVMXpbZNW2fx6ZndMzr21MPfCBDxOuxlgytRvMag2rdoAlo", - "aV2Xajd6kdKnNKMiYadzydQ8z9KjaitbBS7Nh7YN1lIS4MPhK+/ROQ490m7sXztExc3yyvRdwn489wxQ", - "D3Az2BQF2HrV3ril44ibR7lH0BXMvCI50+e75TX5o8+V146/fFesR29mwq1Is5XQVp//wbuNNiAu060g", - "DtWeDLsjNDa6Pu1U9+2b8ykoQtCrP2EIMjyAF53F2ElAcevJJGxSh/7T+SQOK+YIEj0EcR39xj+xHVaN", - "79sMB9UpuzanbJ6EnyGiYdX8vmktOmXj7Vo/UdCY2NaNixAemWo3K7wPfYBG7T6uvx/7Ny2OtmrTfHQo", - "AjjU+/p2a+BSbcClSuUJB1Jsbu2oL6MIXI6SUdX1PAO/+TxlVGkHgcWYy2pbp/rPsNgexnkU8GjBBoFj", - "tTFb7FUSJmW+Um06gTmOEcSYpUO7itbXk0DqRwRmi2zHfnhIVjAUn4QyZs85ebO3d3ByEssmtbHd1h7W", - "ptX2s7HjjZM34z75w1a3nbqLdI1LfaKj72paN3vDTfOPjdyWPRsfvjjYHwwHJwev9g9f/TgYDo7sX+86", - "1Mk2UqK+4JMySZgy0v8zV//xBFOqmjnsX+9imPgU0ReVlrIu1MIqf99UoAWaoLZhFp87zKJmKLhxdbFL", - "VdyEs68H//STKxgrr9vxR1lSmphbJ3KYPmvREh14tX1clpnNQ7UaHV2eKUu2OrK75dM4lUPXRYlZ0Wx+", - "1Y8J1EKhrWXKB2mMzwRKPsdo4/mequL9uQNb4ABt5Cs0R2C1o9DlI1yRXRvCaV3ZZi5mkPrPYNnnMvyY", - "023VXHeiF1y49FItVbivdXxVSI60dOXLxOPAfnxEMM4p5BLvcuKuWaillKSicZLRZI4HIwSwy6nrO64g", - "f1Wb6lSosoDqsTon54xoyWczl4Z3YwK4wtZQz03WcZRCY4BDyGm1rki5nfU+V1hk0+Hag9uGOP9+A2qu", - "H77imW3t6L27hlDwCcNaeggU9JNKFDwsR1W7U996KcjoBd4LDkUzfeW3x1XN2YIUG64+skpylOdru36+", - "dMx2RA41WdCl48cVEz5fEg7Av2fLT3gMJmIMaQ7gBbz1W4WP37nyCeSsO2sZpomr8iVonwNes0WRS2oU", - "pTwrtX3bD1xDanKe6zkBqKlIyU9mamuCMqxPFSzBG5qnbMZuprDG//cJzu0KGWbL67e8fk14kw7B9izj", - "OqzwZ+dpaZ42d1AwAAk4mi8Ebe8iQyYWSUB7/ZCIThh7hEl4rNQP/6s3L58eHNfcSvUxYPzVg4DZq5KE", - "8vIclemm88p6lIbNZ9UdD3x7vW1bjZKVFiBkZkgfz1s0AOuX2FnCA3x0cLx3AAmsLO7edXht2mPq2GGO", - "2pmPmEzQw/YKkfQusu4beMO6XgC8iZesldy30TNWA9xX92jRAPWNGdIxOmtrR/8cdnRbz7jNGG0aqaAM", - "EBWEynOuQZorJEs4pGqqsn4H4tdksvP3X1D+mkxG+Nftv0clqtfjUs/vmf+XS1saYi9P2Y+SCn0gZS7j", - "lBG7ERr2A0GRzExPdP5WLM1fKAFx52eWCpirJNwYLD1LMo5kjILf7CxlgoNgVQrPJ8/cDTmzF9ONCfL9", - "YDjAxAZnAIFZsRWBebY8K4UvohG9ubaYwX7J9qOux/p3pyjg3kB1CBTUq7JvBeU+xnjGL5ggzqHeCHxe", - "uHP6sYWwn7uK3oKxVFlhMQTDAdByVN940cTDKUn5FIo36Sp7WEHh32melAtMH3ZOVVVdMQpaWkbL7r11", - "lhlX3sLomiW7Ybd4y36Y66j6CWqvK/6jc6Lpeyh+kROaJHA4XORhWnZtQ7wuXbJRwJUVBgwZihansx+9", - "kAYJ+Vec244D08w9VGLRNHuSY9TO3p5TJhfrbljQxufJBGCZXCDvdlueC0K99NVxu3BTIlyAXWm7Y9Vr", - "nVwx4UeH+Xpt0+ZHtBdjblCkpgq8rqJ5x1ndbye/THKBD8Fq6O219DXhmbBlSIesNS3kCGnJzqC29rue", - "ahsies35OhRK0xjjb7dZf77gYVShg5p4X+aIff2byS3a++3lmj20L4KWfUhee+fXleCIEKMItQygWX1O", - "oChlQHnXS3TUbRglRdWvhxj3f0fluCNfvrRV4gbrkYJCRW3RUFck1PC89mGOJ/2zdU1xANfxE2fts3OG", - "oDZnvHdDicJs3Redx8/lnCqmNlMvi4wKUkDH8JK8hwKigMYzqN4YF0UzGonbNL8qF2Jp7btQ68zMp8pz", - "31Z9b4lCbkA2tW6LwZuT/cHKAt+gx7hw+oyK+qtlC8n3FDPxVZYCZ9MpSzS/6KjaZF8MYX5pyCno0QwX", - "75wl+YIp4ocZERDGRK6dvMjSYdUe/CWppNNPFFZ74OCwFDSNRZGGyz7NN180JOMjWS5mTG6yct8UKsZO", - "ueCaZctPjQhD1rvQsOlrrmi1pM9TtsSuC6q0ttbxPlbJfkwUW/Cdfqu5kaTgFkYsXr0tI/8Jy8gDv+8o", - "0+cFAmLEA8kTKOFpuIStjJnMqZhB0Xdo/IMiULw6oTJVUHAbLz01tCpk90YkmEmmsHb82E6iLrlO5iRP", - "klLa2q62xre5eSB6+irVIGgNCROqrDzOlCguZuClCuZyRaih3LYhKlB8PsUs9zNXHaAy/SAwUEa9f0VN", - "I+mA0NXp9j2qxKuIw1H5d0E9rSYZFe5NeTTkuB5pDGLBROzli6LULPU1vBG7DVLvpG1D69STidhBPkP+", - "1xDrGpsz3yh2/d/6FzIp7969n5gul/ZvErAK6CiTOb9gKblDuGiPcpqHY5gOZu1pmbGUxIcN5g2HWfOk", - "B1/lfw/pii6YVF4mstLjbvNs/IyNageDHIoEazKytM2hg3WFtTS7ILUTrC+RCd4qF+DVEQuGyseFH9IL", - "1v7GeBIWVYMyKrrq3fhq0Dg3MboHSvW+PHQzF9HXKdR/jcLwVozYihFbMeJzixENAms3C2loQDnXEMzN", - "rUbtIIQW3QYae0YD+m7+0WVJ+gZCEMDgtQ07+BxhB9Wl+IL0JeJC+RoZb8oVOG+7Ugy4z072d6JFrzO/", - "b3uHD872/YTtu7CVAv5cUoC5VXvmUnVkcAgu3XTz03dsRw9P37EfMq5TSz2eRiuDQ21/uPTmO7mc82Re", - "aT3QUxEDBJW2BnpIF5Sty1LpeUe7/97dryl1tnjmis3GovjoU1nn7kGGahFf4bm2yJW088bUoC3d29K9", - "Ld3b0r1vhO59I6qEV/q2+sTn0yfQntqDJ0prBN1yxxvgjlvGs2U8XyfjiVKKYwYGvSRKJ+wnCKlnVzTR", - "HsPry8p528Xh/hd4Uh2VUT1I9uXwpynwHbqporPbFqOePqS6sfHdun08FEWp+28msU4bWy0yZFvWaRmA", - "W9/17wPHZhXdSC0ymqxnpN82+9xyrK2j6E/gKFrjF1qVuraKNqGeA/onE5JO8ZGcoZbmDxv4YbQ4F9LR", - "6Qo6CVC7Z7Y/csDx9/ou+AiXOEOmK0I1v/Ja1w0auZJa9aNRFeFo31cb173uLDa4a/OEwTDDEOt2zs7D", - "Fm57h+kSf/+zbLurwXSYfg8Zfb6rQ1zbnOiJNkjPTvP3TMQMw0kuVLlgkhTQjmjTEBLk/Ixlr3JJ0pwp", - "8YMm+TlbEgeVTVGAgVikOuoTccLYE+LOcVDjXem8yPhsrnl+RxUs0ZJmd7hSJVN3du/99UH7xhjOy1LI", - "hX+SlbMVmYyGhE/ts6MU2Skk53Eh3MRm0QK+eM6IHbl2+H4ZwNrVGRh3DC49N+x4+tUrneXXdbXXPmpj", - "VwWeuT+62gYZprCx+g6Wzb9FyrZ2VUHJhkhBvd3407IooQATivlEuBVXJdOlNLeNapugxGZz8RPlizMk", - "KmeHY7F//6h4+/be+N5b+bfF4/9Of2fPsx//9berxd6/Ln8cLR/+9uBkZ/z2t2flo9/+O6XPfr/7+z9/", - "e3Dw+72/HSux/PnyH9Ppvx7+dvXyIl+/7mbOdYuEKHE0km/wdLFDOQjen6KcOc2oRrF5NBGvBSP59Anh", - "4oymF5CZJpfwLykZlY2sDq4NpGNwTeIiqBn/lMcsWmOcnGjOpNEqNMkYVZrkwkrzxLMZs2GeZnNBGE3m", - "2K/9mDGjGibdoIaI7xIPBa8QFUDkntNbILq0zWeRvjHNsxR8U7Df+C5xsM2Q1wX7TaRvFOziNB8v4t6K", - "NwXROSjDqMB5AxBX5LeSCs310jMzm1sDt9dDOBGHU2JgHPrf4O4WTOxAecnRIJZbqnNVAJGbe22qqWBx", - "w+BchZsVu4/e7Bs58V7drj0vdqo6PhyoUq3hNcV0d+Y6KiYv7HP0lJuBF1wY4cbMtKBFYe6cvQJnU8bW", - "2aXN2XzGYEGKztgZyP7rOr0xTZ9Cyw/+7i0h+d0TxMWH4SAXrMcBbsKx7g13DIR3AcKfIlM/qJctqm9B", - "mMnOv6ZFUwX2DjegTV0+myXLJakM3+g7+uuEl+s/u3cYa6Cq3+t719mWd6pXcOrX9URTzZPr9IzscRux", - "sU1WhErmE2ri7bO2qirlYGCAmQiXZxI65gsOkp3Pa8MicwwJhQu9hC5OkrcEzV/9ddfXbe/mmAC1D0pu", - "bb51+CCEJ9fZujgZCM6Zu+ERigjMdcpYhDRSIwqgGF2UMnGGTUokS0oJcvWURfIZWKPjHk3jbifDHJ1h", - "MsFG3gzuN2ki8BFtmWWEa7JgVCjzB7dwoaXUzr+JE+1pfeZv6IF2teen9sD39YDGq7z91OXecSwPfUUo", - "6cOzZRwGbnCpbjzQy1548j4e8LWNSvuTuVquqUW85XoeqmNx6RyF61VkZxgKAoH4Z27CVLJ6wM8fH7q3", - "wYmtrT3Q9GovF1M+67/KU98lvixNr4wsP+WzzrWVwnJGK9S3egRLxjp54D+ONPQvLBVqAj6nrG+5IsXR", - "HLMPu7EcqQoVXS9Iv6sHcJh28XStHUmsalF4DfbkDtoqOS3Cr6MLigklLhOQFQ1Wy7dcneRT/YIvuF6f", - "+/1wSpRr/b/myKG9Ek0VJKHCbExtR9kFE4RPWwKUoe1Xc1oqbU7FnKoxJIRE7ZBml3SpMAk2plLz8Sj5", - "VJMMgI1Z9sAsC+E0x0yxCMr+nZcAJuawBCWI0FLnCyPigE2MQlFgnrZERTy79voRlTBBJc/Jpcuo59Pd", - "2hRM5k+Xzxq02iqHJFeBjXfOpBEjLUheO7YlejvBwU2um4tx+NFEnM6pDgec0wtGuP5BEZlnGbh9FdMG", - "RGWvTWntLJRc0qX11ULYERhepMFmFYswrOVIhhnQrga/55LPuOEgdrX1pY4m4iUVJeDao0yVybxCAWDU", - "iF8Gbpfcf2ITD04GQzIx9P3YrmTsfzasYWJYQfMTFgxQhCJuXQL8uCnBv9i+G2T+EFxzmlkAqbMQNIwJ", - "rfN3JHkuuV6ufl++H9gFcILC9qvySVqCCJ9rYJdc6L8hA0So7z18WH917tdgYHMrgK3FXXWTDWKxqV9E", - "+4X8afKCvb5gks7YWAeXeQ11AjaIpxA7m7vmxgOjLyx6RA6nBMeAxkgIwORoUKJzcjekOkd2AD+oGydK", - "hJrKu9PQYsZSmLgrsxsE/wrN5AX1uQVjNH0i9hEvyoVbrdV1OjQYbzYDfFi4Ptrm0FYgNzDSoI66mocl", - "XqRpI/AfJ69fkYJKqDjSkCbCQcnpnCubwN9ofJnKK2cBZHhI5ix5b7AaUmHMY4w2T1fAY1pmtqwGUlZQ", - "W7lgOzOJBk/byZNgu2v2DgwJNyzGJpfggizzUpL8UhC1VJotRuQ59SkaBUF8130Yf5AJ3mLcWTUZPCG/", - "TAbo1ZwM3pEP4QH4r/rCQVyrTF/WRtE3eag9CquOY2BMjCWgMl93MCgiZqBAKd4HTUDzT2SQWHNJt2aF", - "rVlha1b4/swKbTpV+fzqCNoq9GsV+tDP9aV1+uaGxr32oZUI5dIGM+rjDNzYZGVQs8qPcApffde9fLHg", - "Gjwo1ju61mfd7PaxvsRu69uwpxe9DdGai9ONA/RKOidFl0DvG9RTNotKyjdkiApCRTLPZd3cN8AfV4cR", - "uYEMVRr/O8Cxi02zY7S5TxXAhG1AwKTWmiObgDeDZjaO1bT3cGzn6ojgrJbTm3jW9+DQDbAiYMLcNR6w", - "BzdpSI6qcZrPadyHocNtlALUocIw3M5XNdtD8r0ekh5n4zBYzaawVEFdv6Z0+euQ/HrJ2Hvz30Uu9PzX", - "oeHHvy4Zlb+GPNIcguHg7cHBT4Ph4OXrV6fPB8PBvw/Gx1GTxTFb5BcMXlKczPlUW64TeyMrWRIqFfYN", - "iemEGjW1P4HhxYxaY92CXcE7ZckuOgBRTAcKAbDXzksFpi5fmLalsPnsl2O96iWmDp5hWlsRfe9zUA+d", - "oAPqucgvR+TUN0yoELk2SrsND5iWWJQUuT4kfE8rA4SWpUjABGytAwsuSo2lZXRO5vklmXOlc8kTlKqZ", - "JCBXc0XMz5G0mh8XTd+wysXKVGgmF6AmXwY1YqOGuBz0GiiYNIQWkqfO0huohz8oLzqeszm94LkcTcQO", - "WWvpc60CG1/QzE09itrvJNOUi3EHEexYJUpqlvBZ4gjH2sa45bKyLdYyyI5tqYXWstaMGFlhZ49V80ZQ", - "EHvXe0JFep5fjYuijRL7jdCiAOfKuY26AfrEFFj4XxdMgE/LF93FcrZzKDOCac114EMRSz23YdTsyqiz", - "NLPmL2UWW7rIDEWnzGrxZr6JuGCST5cdU35XJRO2xQk+pZHqe0lPn3HlWHRPMw6V75mGR8ovbN+4XLSo", - "GhI7CzoOsTq1UJpmGUvd/XYm02j9t6216casTZvmRR8XRWda9JNaSnSg77kQKNVF97HbUEOL4geF5hqu", - "iGUZobin8Ke4m+ybzzV+jUze7uYGibs7XW0Wn3vWxj0uin17m+Ks2jUk46Igpmnk4Sey+n6HKBAP4sSi", - "IgcqkBaAUsD9PGcQ6EB0Hj1XXdlAzCCH+/bVQK69HD004gEEJriAlFmWnwMbQXHS3U6AwpUk/7QPOp02", - "CyAP+ldms1AKG7EQuy/B0P0LpEfPEQacvanKqB7J/DxjizAXWN/HKuyqYIlmaXOIjvILUNXVEAebLCRb", - "klIAPTX6DhVp5uwMUFrWaUJYIyuHqrlGxs9yCuJ2VftgQY2GLKhI2NDqb3A0Mv6eZUv7sJJdcAy4gdAI", - "lS+YEYvoMlqV+iSXGnI7x7crh7TPXv8Nd218sjcYDvYPTvaihO5ES16wqJQ9Du4QNoNjEXH/1sTaVTTO", - "3KrVZz2QHhJa0HOecaQPv7QoC4IEdnuaJSVG4Gt6BU90A6nNJnsAjgeeMFh+wc58tzNNrxx5fDLYcz+b", - "savN8K3Nrx+GHeC4ybz3T6E5zZwdGy3VBMN2OfM9KlAObZ6KveCTj5mBT9WXTpDsszxFkjzLWKIVyUut", - "NBWgAEt2wURpQ/hsDwdJoA27t30Lpud52kYlDn3m5gqwiV/IUfXFIRS/+A8xacDiVLucNDbJyDIvzU20", - "I1QrDBYBaTqSXLyR2eDJ4A5f0BlTdxDcUQFczkKI7eskDP0CGb9gizz18lqzg5N8gH1gwQu4TVic99Ac", - "dpok+mz33v0HDx/99W+PW5PUJI3um/Nhq0Zu1citGvn1qZEVhWji/IX9MgQLm4tItmNySHeUlolPtBW3", - "DG611O9DS23xhZgQ52QsW9odUw5uJrOHCq/nglVgG7Ccrbq7Rt1tb1dwz6M6DDTfm7PkfV7qE6YUz8XL", - "KFWwe9xoO4Khg51iuixWiOvrtW47TUzpDqR2VRsN5JWkVGdXtf+JCUYfo7h7hWOt3l7pHFu1vU7Kmtu2", - "gpz4KMQOeoKD2XhuK4u/BCF/zcBxzeBaZKttaqhI1bUsDREcdV9cu+hDo7Lrrgx6dV0KVBKhbU69EPLE", - "KP0ZJM4rZJ6Y+w0kxoKozmhiJTf/C0SdGWLY+N3OdYaINWsqk4SxtCOyHyE8MaQDl9K5CCAvdgmxGnqI", - "s44sgkFff7ZGfQXR1gg8Ha2NBfViy1ENztXyeHsqN2bUvtLA9XrA2/pw239dG/PMfFcbjwxEp55zcm2W", - "rU1Fne5r0GU4C8B1VyDKgT1j9Ycq2NvuG3kaxpiujBc15LmSdJqPNGIc+AjlbjtIysArXEvFluaJGllD", - "QZIv7mh6Zf5vx7RWNfKvr5L0bPcu/k+d4sOnyST94281on5qZ11LxpLVwsbb/5+9d99t4+YWvm+FEPZG", - "k2/Lkuw0bWOg2HCcQ/3k2NhJn7bObqkZSuLjETklObbVfAH2RXx/fu/NPVfygovkHKQZaeRITmIvIIAc", - "aYbkkByuHxfXgQ0nUp49Pl/2nl+4i8Al0jQeRTe4eZ7DC+6dAk2AwIqLABfm3l6tF1dcSyVFuXHtAYDM", - "o3Ctnq3ldW6+72RzICu+9HEbZNfyTd6S7Vuz0HP1BaBowbJerOVNybG243t75VxpTq4xN11Cho3aE5qb", - "EdryZgXqtPSkUxqxm/A4NXGPw7N1/QSsnepFCL8FNxfvLQ5hVeoVYdTivyJSOVuw2fzphjsfcvaSj0Wc", - "W7ftwc52sA//fstTePorIZfBnCVc6drYaSy8LXq+V3vpdq2rj0qcAj4PUwjLRBmcJtlQp9KpoZ0Gun7z", - "AHu+f7x4lURGP3v3Q42yeeHxP0cUy4W+bhuTd3FEPl8QzrWbX5kki3N7UtWwxSUlWL519fO/2qj56bag", - "9PtUvXJtrZ8lumeD95trene+C9s+SvW9u8oO5uOq2Crza1zdvr/SoPJbvHJIm9J0LFld36aaqRu0xuIK", - "iivo9a2guA61WYeWLEFLjluPK9k9SumB5tJ+aAPhcdZKOmD3a8FlHgLtLJzjbtbvwbXlRC5vic9/ssV2", - "fM02Bnkq/dZKsEN/x6HdXTu9lw/90nl7/KhTpwcLlYBGJwxGecL1TsUvPrySYufcnSPb/mGExjGZZonh", - "RSk6S1OpTNnBKzRq1Z71ZFJR9Ne25XMkkEBDDzT0WGXogTYOm4v74JOotOvGaubEhhCSCRX1q8lVzhlK", - "BSw/YKjYV8yvYguHvrfSeqGS4mbhnAW0ZbkQXMVTK5J20YUhaBcwoSE32KqoBw4s6258P9/u5VmnNtZu", - "V80V2u1vnG/345ibFQzLYm4IF2nWeELL/3ahthYLekhNNCHF8TOJ5HRKRQx+qGRKBU+zxLk9qkwIFw+x", - "qFv3nJvkGZv5jZol6j/7Lvdc/wN8PmOzj3+Cd/fi9304qux/sB9wXeuUefOd9CoEgARBQS9DCr1S6un6", - "dHlzXbTqBajWZTt0SbgTGsd/2KdpeghbWLnwgzi27bbvbBz/Ab20xq0ug6B9uqk8Z2tV7Bznfd3+/rWq", - "L3neO5MKZqLJekUcu5vyPIhzEVhk2j7+SlO/rnovl3TLurfm43G1Oq92b7ULF9aSy5SKuO4YN/xSeblx", - "54s7X9z54s4Xd764872ROavX5kyQq7kUrTGnw1017qrrdtVLs3GXRwVQs972OTIZTSAzXcgNZXuyfHOX", - "XEx8ynM4Px0zo4vvZiSlsy5hJur18FSjTTvyMJpiQ6mbutWf8uxN1axSW0jhhD6gCEg3G5BcUk+3t11f", - "GNpl9yiUsCgSXR8OIawazePqc03GLoDaOacLi7FXGtQf5YP3UtG58zGCT8V8SXng5RDELL/b+SVNqIZM", - "dB4m9k/FqdiFTBKUhIjfdrXRWkYulkSeomW+qq6PXlbUQIYu97cvyJa8S45MaAoVdjeV1911JjzhVP2c", - "KV2azKExd/J8hraUyGuPIyW1Drfou7amvXJN5BmkS89rcgEzfEoe+D5PWAAxHgy544SJSx/s/r5bbhMt", - "nupU7C32mJBmrV7LG5f3GsTktaX/woimM/Lv//3/Gy769//+H6LYmKo4sfNLjiCSYgjrz41myahaB9Qa", - "ySSRf2UcDHOnEPJRM6EhAImvMKWzEMFQW/Z2JebGIvYrCGn37//9Pz1yJEhqVxbIhjzhmuhJyCMUM8XP", - "Q95J+y58o21ZkAxCinIIDZJwwXYsYW8sJjzuia4hCnyec3UDaeZWWQetnVp6MbL15ipZGkB7ZTXXlVSv", - "mkTvumLsV46b7Gr3uWLt40bTxfmf35ksi/DfyDkLXRh+KTaZCT9j5HE5z5wfyCchK85CrOJqJqWlhxe1", - "+VLWSHHpb2hIk982vcr8kIR2rOpLUAY1HStX3hgXSNoNb9NB7dLdAUSsXtwYpGG3WGfICgEJdFP0a/9z", - "ENqQY7rtyesjf3fnY0XA+AoXlWL5FrYxiRgcPYXLwtMJduGf8FQ8Cr8B/bixKl5y17/gmu+jWDsA1Kbo", - "ouJdf737YkXyokelr1pa5ibS+UU1b5zylmyFheoRw/YvcMXKCQNqHUgOWLcshNj+EH5uXiPoVEKOuxUV", - "GjAqUHgYwDmJ56Otuxv5dMpii9fJbHkV8+P46+6jNVUlYJLuKlm5NJe6pJJepdW6sOZRq+uQtZVyLtK+", - "Y/EQ+T2PWu9uvlbVXCYMT0pteb3VtqBSC5Va9Yv0FyX+boyGLXTO2sdmQRU23zNXlqUbTzeHqoWtqRZu", - "5ZbN4UJl4+bemlXw0BhTaI6G5kIJuZogfVL+Zx5eqDYC0Dm/zK0YaZLHfYDoxXUreX5pKfbDXwxiHWsm", - "DBnOiC2zZmPz6bF5UjpzgZO9NuKcXxb5vqstsg0qqw/KDfcPSV674upep3a5/No0IIwME3EquTC9IgZH", - "/pUX3ZWvOOQCrnznJxY4nGpI6WpXtWlqenmW+prfRpQnLp7U/C+KRfI8z/q8pKPWCaLVGFhkSYCeYwYn", - "yT7AmgrJ2KOSeqgmLYoP+LVmyKJlSi8f1KSotZLVf/7H+hw0JfVhfTg/CCdaMoFzKQ2djrA8Yc5lksHa", - "MlY0zmDg617gJerKmnW2qMqdYOiUiRhsvf1Ni93sk7a7NPXte/tlNmWKRw1KmbIiJuFT7lNIueZQQ6ZS", - "O/uFIv51LgU9JvoE9x/zRPLba6Hrn/k2Jow2N9I1qdxIPxnWVkK/KEws6xLy82IWcTF2M4tr4maPTxEt", - "Fckn0T6kZBLkT3fFn/4Sf7/blfshJ39lFNzuYa5wSIXm8jbFRX4pwGamXNI3N4lDDXmdfxbF2yucjUJx", - "2OcKySsbK3mhK50JPeCSf+qmDTBTuvaNOhUHYaikCKr4vMcreiQuCKN2x8pdeLpWfAtjZIfLz8TgblDS", - "XPNKEPaceueTiPvcpm2TiPuQTq5T6hbct4JmZiIV/3sxu8HWEiSEvAcTqr0OjglC0zSB42MW0Uwzwg1J", - "aHQGmex5TGwzLdpHbqscKQakTxOdw6qhasxMhZJrnrepqUuoozjnml9ZPyzEKHu/ACUHxFdFHjFDeaJ9", - "pgNy582TQ/L9D4Pv79oJWHB/sbSWhJzXkPmSADCmFFI+QKo4UaslttW1iE3ALu2e1nVstUauiYy8YVqh", - "GHSNqBJ2eVyHMp6RaaaNO4b/x/Grl6XsDjXWGM57vq6lb98cFSfYLpp2vsVzS0Le4JYNzZTY9w3dh81j", - "vwgqsAMB93bLu4JM8eVRnxen908nJ6+DUSTYsY+ZsLxUHOBLxcdchEQhbv627upvB4NqrLzd79z+yy7H", - "nf37Dx7k0s5fvBhHzy87i/1NiZ5IZRaiRuhsOoW8JKOFeVjt3oc0JmFnsDRca3AFoEOZmf1hQsXZokuA", - "neaRFIZyoQmF2VA3B5qbUy19+ajWL6Guq7rhbSpN14X1tNu53BnLHf+lXXsT3XObNL8ElC/Z4dNUupgn", - "KbX75M6Ym0k2hNiQMmUCUmFyWfzdT8/GfVcstDY/6q6JzlZI2kVF8UYZyJWW5/ku1VsjviC/dlvh5dtZ", - "L7YaDvmXdERrmL3G/kFu3gg3b2uavbPoAXLxSOus5jWbu4BENHV2alTMHLiEk0idMUuRSTkRrrd+gkix", - "R+4KN0fZOVOWck87keKWeZLTjjuyTJWP8FkynoIznSGDIEe2lLhtyNoXNJpwYQvyyyks9SCy8ozMtsCu", - "3UDkebR6bWKj5VOixok652rFIKOStzWDqtoVjmc5n/0sZ8RZ0uA2Bz+FzCd+XN0eKsz+6oSyeypgRCsG", - "vWd4q3lQd1hSuOpFE7sfsPvacITzBcQM9Oq1NgHDFo/B2r8h2zqSAFufS1NdHuozk/g1rH0L5tbS41BA", - "U6xwv0Yu75ubeKbQdI7gIqOHbiuvwcW8ayHljksjt1TahQv9VB2GDVlpZOiCENyKsMuTJPgCOt3OBVXC", - "dl6dOvSd5LHPgHcQLYv34S+y17sLS486kRdz6RzPJSS+T0CkGjbV9Y5T7vB76ZtQtO85F9U2fux2UqYi", - "JoxfRlp6Dxb3LL5PP8kLMs2iSa4bk4YmpeewzzkMz/ff5A7rjXtkdzD4TzJl1G7MksSvtppQFS68uzBx", - "Sw3vhq6onZD141Pv7vbljVE4wb5943Qk0qxmmfX6ANs8WyWhIrzOSzq/pdBoeJUb9mJRbm5Gz1gw6KiZ", - "Ex+7HXnOlOJxXWqN10wVV5P8wiKnT+RDFeRpgbySKpg+/+mu+NMtc0OWKz+NhEGqTs9WKuaFjrCz8pVv", - "Wqc5+mauaVaM6iazS/cbPJ/trJzY/f5lpcQq5aaBSlpNpsoDLMqi6vsXLmx8+WmhKCyGjle9UIAA/AP2", - "tjU13eqwxvTMm9tzOSMEa4pXUTzY0SNbSpiZnzvWvm9z27VkQeZVVPBrLMqPuI6o8mJhZXicuZtfM8hj", - "u2JVqW32RifhsohRsXvAK3WHlU/whJ/SHwtxl2BcPy4fzyDHv4gxbXgdb/W45gDTbmyr9a9aqStXr2Q1", - "XhbMc126uETP6wFDP76/chr5Fi/Bqgeu3LPhBxbs0gQZY5aYfVNTMrQuii98NX0NMaFjyivoUmQ0rN57", - "kYdh2slvFvJiw2bb8yMa5vY2R7R+n4Gj+iWP6i9cxPLimP9dp1objxUbOx3EBVxHNP+7Ykf14ujl25PH", - "nW7np1dv33S6nUcHvy42pvZ4r1TxRs/2XLksfkgTKiL2E9dGqobgABf+WjJ0F5OJu3pxZg0zZS8VjcU9", - "VVQYEi4rF9RqFwK3P8yUeFRUcszGwWtvfs8RGn61pwMTIkOkSGZEMZMpoYmSF24f5u7SVuw6vz7l9HkZ", - "WDfaW4uy3W4YgkJofg7vlZkwrnz8Gipiwi4XfmQizssBLaGfW94sQ09pkoB7EnWve2nqQZGQrrtU6lCa", - "iS20/Z6vOjfcjFns5rlXaL7PuwuTYvH9An1ulCluZse2bjeZDhOZxYdSnnF2kNlJvnDSYy8gB6+PyAUb", - "+nTW9mp4QHuB+2+wkN7v/PGHdomLS5ZQKX/GYLJAaa+lMjQ5kWdMLKszkkJnU6ZICtcTY2+w1ULXQTY9", - "RlXZr2tiTJrXsrJ8+0xty/wIJi4jWWsoLV7Yl9/F9omgaEEhBAXMU+KWCTEOrt4+gm5xo20ITRI7h2cy", - "s5KHizHTxiUC1F3yV8bUzJXjyuzC5JtSYcsPqm6YcwmPmLeE8uNxkNJowsheb9DpdjKV+Gfa7/cvLi56", - "FH6FLCz+Vt1/fnT4+OXx45293qA3MdOk7PdStDrvxE6348NrdPY7u71BbwCql5QJmvLOfucefAXb0gnM", - "uT5Nef98t0/TFP4/ZqYue6I2drrBU+Wm15BQx/50YO+1ZSoK/aIb9yDFJf3XdGxRncU/2w7tpXRJwOnl", - "t4GssDuOkA8RHmRvMHAHtXmKXdAJOXO3/r+8asa9+avWhYM0tc/ppt5y87s89S8oF75d2ghvZfNf6zXm", - "IY29/m/BOPBjQ3JdsIqKqLCgAku599X1kaf9IY17iDhzoUvklEFQEm8fBEelEYP4I04rat8vzoQhTCmp", - "nHK0S6Y0scjC4rxAPROGXnYtO4HhYfjen6CQkaJTsFKVisQsYim8ruEqJTPDxfiu787djXfnMoPNFuO9", - "TXNLeOJ7G3/iJ1INeRwzsd78yUTMlDZSxpX5Msxsk0eZZqAuzzuTcANPcH8LrwD4RAuaHEPLHtv5t96z", - "MAHn12CxTAXJciNWK+hi70Nt570/MWOxHU84KhtlyciHfCt1g3/UzQ/WsZNTb0V+ur/ek3Lto/ca8OmD", - "k/DqdmruxafEMMvaYJx4zpTz/VHENijOEmZFHUQNoKUYULCiJPyMJYBqFtTOXcgm51JuVxMSs4TOes5m", - "wxsrbvxdbrSbXuykg8q4u0WsyKgLiOZsNMsC0LIIHVsB1wGp997uUbifjv6E/GO3IlX7H3j80cnUhJl6", - "00KhDU0SOxVpmi4K2fyKgzRdFLRAfrAryrkPTq4LSHUHFEUfXq/uelEyf1u7MQkhv0IAFBBDTMSFPa+f", - "ql1YdOzcnTBqF6WwRcg0G2VJj6DoRdGLorfzrXvRNvoEL6V5IjPRdryqhvkxj2HURlzEdhI7wUQU8y4X", - "boAaBgWCCLpRvwgCWIIpWiK1d2WQghF2ybXRyB7IHjeDPUp4ANJ/JX906zfxT5m3/64jjKfM3BC22Oiu", - "H3f8iB2IHYgdiB2IHbcMOywutASOOoVH3wUK6fvgLHBwK+uC2/gIH/66RTI5SFN3iY+L8pUyCky4hzKe", - "bQxPKr3y+BxOhKtnk54GtwZIlRasI0IRmRCZEJkQmRCZEJluEDJVUWZNcvJB5fvBlX+5MUbu8F941dRZ", - "ZvjkVK+VHPGEHfqbXpXumWMpdpkm4No+oolm3qoITF4KuBpWCu2UwSq3spo74Xp+9IjceSv4OVMaoou+", - "ddFFn7NLHsmxoumEu7Cjx1IZmH5HeeDRu58hL+i8xVdbuxQuxbqmLOEWZ8ay+rbnfMrNq9FIM9OT8LHu", - "XRDDos1Ny6fPKxUz9XAGH1yMe9L+saViH862a+GzvEm50RFCLkIuQi5aAiHj3WpLoFr6CrAXEoLeeXyZ", - "MsWndreU3F0X//ofily2S62HILAMrMHzjSLDWSkwVLyoWnO3Lhd9rdRtlbS7aHaEch7lPCqzUJmFoIOg", - "89WCTjNXXI11llglXYVdnjJze8DluvQcqNZA3EHcQdxB3EHcuY3mTptjnXpbJxcOhVDIriuVD4Nq5ye8", - "TpCiZb4FNd5gqWbqZtPP5q2llndXCL+1efupdjG5VmFZ99Nuf7821+0tBZHPxpwQasG9PrnAshcAoPgw", - "voRqQu3PWWKQUZFRkVGRUZFRkVG/fkZtwsdNYWvNcaSPWbciNFC4Cl7YUuzO3JatzjbtKBS9buSgPGig", - "Nq/tt7rncoMx3cb4aPFudmmYiFl8/EmluOD5B3aifUoBD9lIKnbVB0mpiK92bxgq3bmtxm6+T65s1bbs", - "/m2br/m60U4NYRlhGe3UkBXRTq3MZRvHwfBHs1tnhVUruYZc7mqIT1zOy3EqTsXJhOtStGUIRBvZoYkJ", - "H8GqA8Pis2dcMCKYW9xDBWUUzozmRcJ3IdWUJsQ/CIlmUeJSJ/0yCaoj+32RSaXb0NA8ovOUqjOnbSqi", - "Qou4GqLeXxo0U5CfqUg0U81kGaoquuMlu1jWgFBqWI19mvAhMxd2eRfy4s7dvEmCXZrq03+jyZCNubBf", - "wD4C4F342KawfrCpHxYGwwD5w11gYDLNEsPThBXsz0dNPeaCAZOYjyDvsPHvd8RZTUDRgDKumOdcMH1Q", - "ZDvZvGK4sT6Xe6eVSng9XWmrUMS+WTW+KKgtRQBEAEQARABEAFwCgEeLSDSkmsUhC9ainN48JdqydUtG", - "XGgPueNS690t0BAghGuSabekR8sLCKtUYUg4IkGUu5tOxZiaiYsI3wBtUPtBBWPnAYyP9k/Fjs+J4HwJ", - "wqVckKIGbahh/srAQHm+1aLZsWRafGPIlBqfiqR8rSW0grkWil/gKdfJHm9K+VY+AafWAZgSVxU5rhaJ", - "5vMRFvQFUhZSFlIWUhZSFlLWVY5krwOmPvi/WvqD5oosyy+vRFKiBpjAXiljBzpWdGTIHakIoyrhTN0l", - "7kQVFD5DGCDm07XXeZAeFbmHV0dmCw+BnqKIAIgAaJaGZmnIQMhAN8FTNCeOzTuI5kWT4YwcPap1B/3a", - "KaTbLvqaN/Ja1u58BrlM8RB6bh2VyONgR1YTBq1NEyELZ8zcvIjhSK1de32ZvtahlAmjYssesflBG1pK", - "Ib8hvyG/Ib8hv90+19dPhLeWiqs+jc9t1zafCR64C8pmVN9od7RlBzA3ZXIKqqp5Ujg4O7W9reR5pZTT", - "TtdOc7Ap863QFWOtxdKDSZNRVGj33lwE2zSaGTmlhkd5E2jkVn+nMvNmaxcTJmqeJdOPmKE80d/42zQZ", - "cZbAG2qoV8uddnw7Tzv+qprsCO4KDzG5odRN0cMh5iHmIeYh5iHmIeYh5n0a5q1HVlvGQMdnSzDQA1xJ", - "80dFbNumDGGXLAKR4gzZ6Mw2iVxIdTZK5MW8uZjQhsLM0UzEtciX24dlOhQaSTHi48y+W8FoPnXxKyB/", - "5oJFmpMQFtwuCuOv4JYK1mF/winrn/u1DgLanyaWW9MNVyaZL4tZySSnTBPnKwrFTqnIaPKH61Ga/CEA", - "Xa5ST97m+XrqcnLZ0UHqROpE6kTqROpE6kTqROqszYnF5nwi5+hju5wJx5/9D/ZjXbM5sOVbbvDmzei/", - "2uPmmpa6nkLbPMQvxC/EL8QvxC/ErxtlmxewZmsGerXYVJjnITPdCI2W85pErRZiFWIVYhViFWLVLTaZ", - "+ySmqj//fJtnhljKVe4yRKuvPTtFaQTfsDShEXMju42MFEh3SHdId0h3SHdId0h3dXTXCF9bPKlUzKhZ", - "sz3cG/uz91sIkzE3jINOp2REuR0wCzrT1GzTLwEau8QrAVqL1mFoHYakhaSFpIWkhaSFpFVHWlfAmu1i", - "mKGXfcUimkRZQg1bBmT5RSVQ/EYTQy99YH9N7hQOBTRNiWYmhFwL5m/f6Hn/grsQ+V8atk9c/FtNpnw8", - "MSAJZl0SsxBszgfytRWmSp7zmKk6FMvb6XHjhF4ikyGTIZMhkyGTIZMhkyGTzTHZarLZLoSdSx43k9c7", - "yePV4W0n9Jz51TpRjMbelTGowWwVPra/La+a+skN8ZSqM/smUO2vdo6SmXYC1mc5nZGJvJibZe7ycnKr", - "BSyzld4gBdnmT0QXOmiNdExIg0iDSINIg0iDSINIg59Gg3O0tTHw89qu5XnlaZLMq8d0bS5535bXxTVz", - "MLVG2NoDFU2stOusFaJ23ei9ayYrqj7gsgC9tzF1e7V3rpzBvUUx207kXm0C5nNHEEUQxURTyGGYz93y", - "UA0LbdDnoJKOc66qU3EqHs7VDimkqrsnDRkq6043ubCLsqMIcpgnaT9nSvGY6VPhFXNhEYN5MB96zUhf", - "tH277cwJFwzZhJ5zqVwOc6+a41HekF5DWsyquN1ShvFqJSEL5uazXrZvA+a3ROxA7EDsQOxA7GiV37KW", - "CTatC+p/4O1idNU0pC5K14Jwb3HAhqGvUHKj5MaTKzy5QnRBdLkRoa82gy3Lgl8t6CkgSWVdEKyvHUm+", - "jFOu6zuAwfMWxCfEJ8QnxCfEp9sY4mpT7JRmS2JcrVTnuAtvhDpn26dLlehRv3Az+cVnRbpuy2nkKOQo", - "5CjkKOQo5CgMJrUxNVTp9CzYtujlNtT5Zb1ay+nDvJQFoGpnFszinzOmZutaE5dva2tRHNp6ZQPfpQU8", - "nLUpAjRdoRzbgT1vNu7UjfHVygBevdKdqeJ2oj2eUp5crQSdDf/FIrNdu+ZQI1o0IxkiGaJpEYIRWjRX", - "6KSEQwWSXNl6eZXd72GRfXAbOplQ/Oex9c0fDq18URSjKEZRjKIYRXEbK9+anLzLZXGdNqL/Ifx5FH/s", - "0zRtq5+AEIkxNXS5ouIgTR9RQ1ud/xQt+bJsaL44zcqiVgBafS0qAT+gqBlAHEEcwTMjPDNCHkPVSAmM", - "ci5aR0VSb2+jmaopt1djcGOvvDHE9QmWN63Mluc7atFieeOmN5trFwIWAhYCFgIWAhYC1i0yyqlHoQ1r", - "vvofaJoetXJqb0Fl7sqbpAeraSp0GDrhI2ghaCFoIWghaCFo3QAn/E2DVttAQXm94JG/CqkwRBDSCdIJ", - "0gnSCdIJ0snto5M1DtiWBANaxRxPmblJwDH4vHbLeC6FQIJAgkCCQIJAcjOC7lyBRpaH11kFJO7Cr5xJ", - "tufEVQmpc91hdJCJkImQiZCJkImQiW53AJ1PcU6L2TAb96fMKB41u6O9YSZTQhO4mviryR0uyKuUiRf+", - "/y6N1V3ocRhDkU2HTBE5IlyMmYYHsvNWE81FxMiUi1jw8cSQtyeHkHHeTpFykYfufbij79pOYMber2Yk", - "pjNCDZny0u112qRHtr2+rM5KFjHs0vTThPK5sZ2nKsQNxA3EDXQFR2l76zQQMBGCACzJWxA0nfdlyWrf", - "bJOwqW3c6lze5atdqsYkgZHxMcg0RCEZMWoyxXSPnEy4JkzEqeQCVmYYjpg5uwUaT7ng2lhpeM5ImqlU", - "2ndTimTWOxUnkoyYiSZQQaVmyFGZ54j0dZM0YVSDoQPcEZ4wNK3/wf/1jM1eqaNHHyvPnreydyqORiS1", - "y72VJEqec9teeMUMPWP2OxbZJTFi8LS2rjT4PufDQsAkw/KIla91/vCPyz2/oLOpDsATnhiIdEeGMzLN", - "EsPThBX9bJnkrZVQ++TP//bf/ug/d3ZPs8Fg77v5r/f+7NTnfvAX1Cd/mIOMuvzlbVoexqTacv/tj4EU", - "Q9MXvm9sewiFt822l2YNsSXMPUTp55NZyn6EMWWxe5L5H336+abHmbt8/Xwcj+cKwITz/qZSx1w5GOWq", - "Mradan5+EXkDcZ2Q/JH8kfyR/JH8b2XQgXlKL9F/WVaQOw+ZoXeb9wL9D6X/eQ+4RpupMhINZ4THtWqu", - "Uv0PZ+AjtvqcstKIW2JGVeonFOYozFGY46khnhoizdxGPeY8V6xFM+erdZrzB34X3EogOyB8yoiiYsxA", - "u3M0gnGD2Qg6GgLoEl7MXEvIDfEdDUtTQrUh3++Ricya0nc8Pm+j/zs2VBkSU8N2oGVckDdPDsm9e/ce", - "+PNM10wRJZnm56zXoFAKz3tgnig5reiTXDGd/U5eS73Lf7Vhj0W80WadyA006mhUHZXEroyOjKG3w5Dm", - "F9hhJwCUoHuGG8pTImCLXYFg1taX4BLq1hchM7NYSkN3TKiGBbbSFf6pvcaw7rHtEuQ0/0ePoIEHkWUb", - "beeqlfvedrB2AOK6upp7uKjKa1xr6wu/raGsXVnzpt6E0Zc0/80mZv3L3IzBTzsj/QlEU7VOW1quOZcS", - "u4NBtzOll3yaTcP/uPD/yxtjhdIYbBvfX0c4tCO/TMCaicHQcKuEWyXUe+JOAfWeiyRf3ii4L943Jp5x", - "YkXbueaYRioypCaalGTpSCaJvAjz6jCRmZNCOjdDcMedC4zvCs8pv52fQ2TLdzWv2cleNH7sNpW3A0/2", - "X1eUwE2St/sJ6s5yD0G/tPLQwDAZCAgICAgICAgICKsAwUmYIMrr0KCkNgxGdcsVh7npXa1S70koo5VZ", - "H1iX2UuOk2zcsFUv/74507a85qdKZunDmfvWNptdpomMWWff6bQatHaQN/dARRMrWOoVCf7+Ou3VbbQ7", - "8zPjyjZny+6/DnuzMLPR1gyRCpEKkQqR6hbrXEYF5iw/lW3SvARpQqhihHEzYYp4e3noYUMNj3rkINRk", - "By/8zkcFNFU8Nahx6W4tBZyKJ7IoMrSXzGRmV3+SUq0Jjd38pgkZOf5xMx2G0I6dX8cuJkyQiCZRllC7", - "AueNyuyq3SVDqm2zBcwhqPIbTcYOrMiIsyTWvVPxSiSeufzR4vHbF+BGcvjq7csTQsdjxcZuSbSdorM0", - "lcp4h5mSw0fedV6KDRnJwM82Jgk1TPljSOrhrCmP8pPc2WMbETh86a6qI5FmRl93LuXwgJhKGckGyQbJ", - "BskGyaZNKuXCC7K1wVmQzv0P/q8ViWO84oTQnCRcfK9TYTEhKv/AdS7J7ewsyXyRS3hyNKq/owuSrOLs", - "WhQQxJldmbg/FnE3hmkfSowlc2sgHY1YZJzBKdgylUrunQrw+Z0yKnTXQpplrQvqjmJcZV60hnKd8ZWd", - "xnTKyBmbdYNbbRC2i27HtqXgd6vYOZeZrl4xoefMSy7X9zEZcaWNhTNqhVvuMjykmuumqPIFG632U8hH", - "fKmPAkZ/R1JBUkEXAXQRQFRDVNtU9Pe2qLY06HsVwercFz8HDgw+qx4E9RpIC0gLSAtIC0gLN8Oh8Apa", - "nbGirUKjueuag6JVtCQbDIzm662GRCs7Tn5SWLRKGIhXylOEvcrXe+1h05668cCAaV9gwLQjZxEWtG7r", - "2ZE9ym9CM7JVN8FLcGUjsua7N2FCRsXs1chtjNYMUQftWpxn3eUFwF2vw0pSSIv3uNXBrQ5udfAIF0n/", - "NhqnjQMnrkn6/Q/wueLs9p3ksZ1U1NXjzjvtrHPndIkUY6bcYtKFqCCSafGNQ2GIj0C4IKNMgcnbkCZ2", - "eArjMil0j8xXkZ+/KmaUpJFdeJOZK5HBkWwXmgH3iJkzS3PvhV36aKIYjWd++TNG8WFmnHjItxFuZihm", - "54w7ShxlhYlb6dR4mClo0YVwr1legre488HY8gNgOJGlRHMxTkJddiGdyawwzytvWuBQmArCBYdQEnRq", - "VwC7y9kdDNwBsZZkRBX5buBbl1to+fK6pee6E3Yc5Tq40SwZ3SUXMkvi0MQwFnJEvh3AmbptPxxGn0vu", - "NzRQaDe/dsgiOWWaDIrj1+8Gxdm0a14uxu0bB8NVt8Oxg+4wqI2a2c9UPHNGtEK0Qi3yF65F/nbwYOMd", - "cCjFKOGRWXPCRrDkBxMoaWWVlYU5VEW+2MI4KfSONtSAdGiaqEjQSNBfPUFbDHGUsw5AQzgoBzN9yxsp", - "60cTFp3JzPQ109pyrX2kemcQb3gZ7iD+jibPhWOo4NBffewu3pIfw5IaPYFct1vD0hat7ZqJDg+IdIh0", - "iHRoGICwc2s9PubBo0Q+B2m6MkXplKozZiDTeD9xnhGrrAbCoNv1VYc9BU1TUiqr/hD8RXHB81DXgsKo", - "3Skni3/OmJqtezhavs0dkG7TenHxee0HGjMisyCz4AkfiuzbmeqoIj83IK77H8wsZctTHdGycCb+TjKc", - "QSrIWr+BRdnV6mzHuISPzQc7yzr+IE1dvsdrlsookVEio0RGiYwS+TZa19uta8wM5YkOEnFzUrnPhTY0", - "SeylZ2zWfI5w5K6zs7Ysqs85JQevj8gzNlsU0yVJdpCmB6+PnrGZL2ftfXWlLF4U5EVSD7rFyeWrnVSk", - "yjbecCfQKdRRa8IBz3vGZvn66c3y1byVjv3NnSWEW3qLGUcCmSzkHaFTVlJehIbbN8UPWciWYyWBZtUU", - "SRAsqzRM3LDpN5qUqujVJT8pcdHvoQve59dJZ9Te6kxmczh0kKYPqUYXS2QgZCBkIGSgWxhn3JNHmua4", - "YVFl8wwk7Qu016ioKCFQaMurg8xMeqfiDTjXaULJ2zfPYQmHhGp2iOESstcbkFEiL5ZCEly656t5yszb", - "N89vilLjEMTVQZpCprl1FnkU6ijUUaijUEehftMUG07che0scdJuOzK9n79FjdL9IH/PfLsiGbPeqXjH", - "FB9xpkvC3P7iog9cRhMqxgx8lCDEADHyzK5dwi7LI8X0xH3TWuznzVhbQ+KKCfdDTYcyZuD3cmyFqNav", - "7dW6B9bWbawS2hdpu+RTS3TLjisPZs/GC/yjPOQbLzxTvE2hK0e+RqVVorJ7bk2sTt43LOaKRf65kJKQ", - "kpCSkJKQkm6Y6sPJi3UpyRPEMqNJd02DVSTz2cu2n4ocqsIU5Cj+UPyh+EPxh/aIuWgqyTwvj5rzXx2G", - "fAhwa5Ono5M12/FshLJdNdftwuhFKLopoohFEYsiFkUsitgWXnpTLwwXZOzCPrL/AT6P4leQI3JpOC+f", - "SaBRELvfgyBefc5dqXnpgfeUXj5nYmwmnf3vvu12plyE/+7aiox9yzr7nf/5ne78Pdh58P6/7vz3/h/5", - "f+7+P//x//7P74Od79//Pth5cLDz0z+evXj5eufk3c5vdGfyr7OpSHfM+c7f7z/s3f/4HzWGdBgNCmUy", - "ymSUySiTUSZfOQFPo0xemnEH7nL5dqAjk2xc7z93G6Tu4DNuq3GbjCIZRTJG80EmQSa5GfZ6V1cS9F1u", - "kqYjaIh548nFvncQ2rlH6r9egBm47AbiTAtLMvvhAgbZN7Oz3i1GrnnDBRexvGibt2XhxhM+Zb9Jse7N", - "IZfOmv0B+X6eKpmlD2dr3jsOd20dKKG+PLJkt2PYpelH+rxazPzEQAZFBkUGRQZFBkUGvU0MWubB0t9X", - "I9KQ+m+5XWSea9I5dzScY+VWksehUNSrXSXzIYINgg2CDZ53oVy/pWaeubxdIdOFNHwUniaaUCFY0iKZ", - "dPk2Em6rF+cvS5cehgpWZEeey9NbXx3houiIStrhasLeHy0E/Hk9uX4bHoNrO6Gv/Bz+9h+h4nWfxN/8", - "9aYtrplAV84s3LasbeusatpRkyEYMQ4xDjEOMQ4x7hZiXC0rlGiuLEKKbGcrPXkEu6gtusm5p0ZSbcnV", - "p6Ym14TPlMKs7snRGwhFOIpwFOEowlGEt/EGorWydqUUX6Wg6X/wfx3FS92GjuXIeCVKbUPIcEZ4DEqH", - "VyJqaq6dEkETw00py759weHrJoekenhYfaCTP93SwxwfHryz3xnsPv3u/m/f379/8OSXg2c/Pd7de/nr", - "4PDnB09+6lSPddATCXkAeQBNTtDkBIEIgegzuGJdEYiWOmotIZs6f62bDSWDL0b/gfoM5BfkF+QX5Bfk", - "l5vhtnVFdEmzGnR5m8a0QSuzSC3u4hsHLl/qGRIyFDIUMhQyFDIUMhQy1OYYyjPPhg/FYGqta7Psblpt", - "sfzYFb7CXhlSsRH7cDuGTxnhgrx5ckju3bv3wK4BU2p6pwKsgTU/B8f7Ootd8DyvR7K9wd69ncHuzmD3", - "ZLC7D/96g8Hub51ux5Xf2e/k1dd7wFdb/FjEn9xeI6+rtU/AB90uFsMZmWaJ4WnCyIhRkylGeKztq3XG", - "ZrpqP+0v+NF/7uyeZoPB3nfzX+/92TQg7oLKU7Z2wWr5EN5Ov/kh/AU/+s/wEPNfNz5E8Prf5kOoLIFh", - "qLbcfvvjYPcfP/xj75+//rb38v4vD399Nnjw+NFvTx4e//bCPUdx0bdvvn3320+7PwyevXn283f3Xj7c", - "e3dwv+mp7G31jzS3zXp+9IjceSv4OVOaJsmMvBX8r4yR5+ySR3KsaDrhEfxwLJWBhf0IoGrEmbrbA2P7", - "a9wYXXUE8qP6+UHwP4Qu/udP33//wz8fDu5/94/jwQ8/vD789cSNQ/W64903u08fPH738ru9N0/37h08", - "ePHdP5qGoli/b8VofJF+ESCmNuIV0VzSdfpEQCvQIwK3zrh1RnNK3DmiR8SCRwQLG7NP2TT2P8Cnt6Js", - "a2IA97Q0MABB1kpL71uyVEf/uY7/3VOg9EXpi9IXFdeouEb8uOWH/8yL9avBh8oStq7CGu5Zra9+A0V/", - "SngNqOhrj63R8iE+S2CNNVXb/WvWa29WY3cqDsgZm9l1iJLM3erwNSerTDuo4u62mXOIdRBgH/vk1aNX", - "+85zBkop1ictk8yt1ZLoLE2lMmQozYRAq6mIyTNbtYB1TtMpIzplEQi3SMZszIR9oT5vTLirKnzddKdR", - "1VGrWft78Oa3ey8fPX52cvzu2zdvnjz5+bsHT+8/OXhXo/3d+/X+P799+fLpz8f39g6f/LD7y4P7j+9d", - "Sfv7tapT7Sq6EW1qY0HXqUy1jUBdKu7mcDeHulTczKAudUGXqvymYdOhZWy5beLKvHGH+ds2CLbVfDER", - "ZeCZMZwMymyU2SizUWajzL5COBlvBPcJSsj+B/tx1SgyYPa3PISMswzcRPwYDwmrD1LdE2HkGBT9KPrx", - "8BUPX5F9kH1uXuSYVuzTPmxMCWVWmXTdJBAZfBm6DdRVILAgsCCwILAgsNxAa7GWrNI6Tkz9ucpikJiv", - "nFS+yNMgJCYkJiQmJCYkJiQmJKatBobZ4PFW3zBnulJvwnJiB6hBI6SZiO1stAOnjXf+u+BmQhQVsZyS", - "mBq6SGO2yJuqNdr9QpwM0SQGoQmhCaEJoQmh6fZBE0DL5oDpgg0nUp719Tm/bCalQ5okQxqdESbiVHJh", - "nPvWcEaOz/mlHSsodEboUGaG5ExEk8aQe28YyDB7/6vi8hA4YRtqoLmqfnFPvpYaCC14kFSQVNB4FwU1", - "CupVgtoLOCchFyXiOhI7TahoETkALqsPFvAaSlgzQACU9+XHBHCe0hZGbIN7duE0RvFhZliD9zKPb3MQ", - "0bynzthsZVedsVmbvvokd/9NeONvqjuEm/Y9O+b2dcz7Rzd30Dt3baWfaOxEAk1eK/s6Gu4Yct5J3i6L", - "Y/Awn2tu/n/pAvnatcXMYC7FjKWvwrdfkC+9XWSu7D/fePO2feZtxegnj9iO2I7YjtiOfvKWplOPy4HQ", - "rYwgdx5fpkzxKROGJnc777udyx3up2euMGrhLA980eAfbyvakvrLFu0quW4HeHgoPOFDAYwCGAUwCmAU", - "wO2c3lMnC9eVwfN6s/4H+3EUv1LP2OxjX7DLJSZBFUEdKzoyJGgCYEaC7D4VR/Y9NJkS2j8MH9nxdQdB", - "NFGMxjP/BIQLX5BUxLWExJK51UyxEVNMRG52JBRsjdJsmHA9YXGoehEWXrJL41FhtWlR6fGX2hdRMXs1", - "qlELfnV6sK9AOQUTdyx3FnRWdd++RzZDNkM2Q+srtL5COEU4/Zxw+jLHwg3TaetQTMCUxVlnOQSTw82r", - "Rl1akycx0hIyDTINMg0yDTINMs0NiLR0RaBZGmwpwAqPfZbrHjlZougiIIJNpoSdkyN7nXHDnGlWH6Jp", - "k9SCCrAvVAHWmAbIT6QwfSRoYclrp3bVhtm3232XzzBBaAQUog019RaNz6HUqxg0ujvXs2fctm0TmjIh", - "2SLZItki2SLZ3sKQXFfG2mVxuQqubQrI9ZVr07ZjfvaGpQmNmOuh6w68hSyELIQshCyELIQsdJuDbW36", - "4LJPVTTh56zZqO7AXRD0gY1Wbf66m3QQifiC+IL4gviC+IL4gvjyCfgSGKJMEBulmHRCvdReEWQDriNc", - "NPjxhWgbr115XyXHLIuUYB/rFkaO+HKCLMC8unqYhebbryXQgq0eoy0g1yLXorMnYh1GW4BoCxWk2nzY", - "BQi6YOtoprYi+gJIKDy5q5Pbny96hBsUdFNEqkCqQKpAqkCqaBNCYkHub0Fh5P4P8ukZmy314gt29hUS", - "KbvvuR8+xX/vK4aXbmMzQ+cubewW1EDoV4gQghCCR3Z4ZIcUhhR2db9CwJqRj361WQ/DFVod7x+IVLRd", - "Khp8Zl0P6m4QmxCbEJsQmxCbbojT2qcz01L3teXYVHiwITltnJy2eD73+fzqkNmQ2ZDZkNmQ2ZDZbrFz", - "3RYPG12orGYfu9fugpU+dv469LFDHzukGKQYpBikGKQYpBigmMAQG6AXqQxN+t7n6AN8HifZ+GPfOYk1", - "edn9bH8lcDm8nJEUOpsyRVyBPXIy4ZowEaeSCyewbJujZEbYZSp1GPhwn+6RzRe5wFRQxWso7oWtpxVY", - "5X1y7Wqo1U5i8BTwVD27GnTWu8XINW+44CKWF20d4BZuPOFT9psU6948Ap/Gp0pm6cPZmveOw13bpNGi", - "vjdgog5vq2GXph/p82ox80OMBIsEiwSLBIsEiwR7CwiWRZniZgaodZjILHYwdiLPmDjILC39/t6K6gJ1", - "y1RY+rtMvVBE530N1hpb7opQEe6ahvAQRetqAkS0CTee8ClvCDO+dx9iIvBpNu3s7w4GAI3+fzkL2okx", - "ZmoD6rQ8qsNSvVrxwDXRFRBWEFYQVtBJD2X17XP9n9PGeLFZJ4a7qzI21xbV6Olfkkhbssopy7xrtsiZ", - "rxrFK4pXFK8oXlG83jof+FqpuM42t+8XQWqWRHg+yq/RDSKdDGfk6BGMSjb8F4vMomQuCpnbIF9VPKfK", - "VmC4k7A8XtZuQivtdc3t1cUG9O1fXliSzD2+XTFp+dkXTmXCN9IV34oZ0B8dgQCBAIEAgQCBYBUQlMTT", - "ys12CQa8yFqh7g5X1Su8j0MZ16Fs9pWhohkFHwo+FHwo+FDRXBJQJWmXS6Vm5fLbVDNldGnnRty+Wtte", - "zVK34w2/nYpTceTSTfuvSCyZFt8YZ2jRtfMQenvIQgzS3sItziajcm1KlV1t7CSAKmNywc0E7kqVPOcx", - "i8mIsyTWdc689hGCULz6Znod2evqrJfAm1WDIxEgESARIBEgESARrOOuaeVTkLj1SFCzBe5/8H8dxa9U", - "y2ivQarn6u8zNmuK4FoI6dXuA9WWLPUhwLCmKDtRdqLsRNmJsnNjUT2Xys4lETvbycOnzHw2Ybg5O6x8", - "34n7TJSVKCvRHwv9sRAWbl0sy0/eZfftimcSNrVtXp2gt3z1nNkVeSIViSYsOrPTsHQhoZGVaF27Y4XB", - "7Z/TJGOlsABCG0bjpcfbj8vN3DK2dNv5iXERJVnMHLPF9Q5j/nZfw1DKhEEUpGvxDCv1GarnEZsQm1DF", - "gNSAB/baVMR4iR3KQpbcecgMvbvk/P5VygSEUYHVw0wUY8TKGE3kqFLDvvP/ZnGXeAnYhQyi2nJ91CN2", - "jO2NxNuUz0hsr59ywdyCDj9WC3V3wYuczOwMHjFqMuXykLpV3fYqNdxOk/xEv4wlUKpOWcRHdrXjojKH", - "vBCgoe2VWwVjsSY0r5RqLSNeGA/4u+6C1cIOeeieukpPMRtxwXwnFCV5VrK1k9POoX2lNSPHx6/m1t3T", - "Ts8Wfexur5ScMENmMiMp1ZrQRIqx8+Ab8XHm6MrO9YSRsaLCiqT5Wt9qtyZwnbcLHuuf5FeimbG36NMO", - "uWMrKHrO1XAXmvVisdM0mdBzRqZUzOCRIqqZ7rqVyBdKspRkVpLuDKkt2DXLDiefpq4Ue5Ud2IRdguTh", - "ViprS0M9Qh67YJn7MDeiTBs5dbQAFe4OBoMBOTgKXgNxpsLSB5VaLOAythNtbqrAMB6QMT9nIley2WKl", - "SGbusewGk0Yg7+8IKXZ8PsG7lWmTMhU69Bmb9cjRCMbJqBkEwQrOloJdVG5znF3c6NZzmihG4xlMeCpC", - "5aX7upX5DOvaiPIkzNBvBw/cUlFKk1iZorDg+mS+tpmeuqYy5qMZ4abrHt89KcjIenfQMoZeh8Jx8+6m", - "pSdwj3Qk0szo607WXOF5TNeMvI+8v2U16YONP8GhFKOER2bN8YpklsR+xLz8sy9tDrqRL7YgnaBDtXzB", - "gkyrGyfc1eCu5qY45FYBZuXOZm0Faf9D6X/2iic5lH3sA0230KG66wjXOmPO3qfabLe1KYOYRc0h8zuG", - "mDBuJkyRoYUwTTiMfgkra9WopQ546tq5fSVqTYGN3felKWhbViFVzNTDWaXsZS8A9P0rf9P1q4GhetQF", - "IxsiG6IuGKkJdcFVXbBHkytrhB1ZBM0mJUM2oedcKrv9yHWNTtfmdFo1ulWgnxkgDyjWYLNj+w/WXjfo", - "oKqKiZJJYseSqCxhumuntjiD19UNn1daFe254DEjiooxbIi8dtEHetdBL6a5GAfdqF3eyVTaDRi1K4Et", - "MZbiG+PaZqTXGfIIHMi8Bk+wC9+TPfKrbwOoygD5Av9BDzilXU036KBztBf7J9CEeh0kndr33D6E6014", - "qT0l+hAxcb4AL6ClK5Nr+3BsNAKLQWYu7HJvgdJ9Zdvlwq2I2H19mXKvPbbf98gxqM5B+T6UZmILnFIR", - "UyPVDCov9YN9GD87oOcoSRWXiptZrvuFZ6gq/rkiAFjuQVmPPJcXTBGRTYdM+ZImfGxhOBTXdcM4IEMW", - "1jK4Qpv8knJj8mlGy5MrNAkWhNihAc2MnNr+sEVOqchoQhSzI2qvDBNcOzMIn7WpSyiJKU9m5cK5Juyv", - "DCIElAqAp9d0GkaHnTM1IzGdkTt8LCRoqvP5HnTw7nzhzfzXYcJf2DInNE2ZgLfCLYt2nYMxo4ld6+BN", - "8JVS43SAzPTIQ/fzHwd2pfvjjf2S/EheHL2884JehioPYB52yYuDf94JNzxkI6mYu6NLXnBRvfju3Wr3", - "B53GxL6WMZG2SV4nWVEwxz6ZBIdHYUJnys/78CBc59OHa8MjotiYqjixL7kckYsJzG97mYV4zuImhbWj", - "5K94f7R9NTh0UUkX/hlV4X5Pg/pw3PPgngf14agPx50d7uy8PnzsSeY61eB2DBSPXUDLujz5r9wFYHdS", - "NTiIfPiPGhMIO5MrITk4HME7OyI5Mp4Stb+InXOZ6QUrikoJ/gl3golLSrkCm4zGIrjOrS48lNqJJs2E", - "qQuumQtIkscjscWEzijMLwDZF9KiOWdeaGOWjhWN7X42lhci/B3q8aDsIbg0mvD2ewCr6UBvEuXhBlbF", - "v5mSUIfhU7bIwn6YrtN84+tmYjQNQRRGFEYPulvhQYd7AdwL4F7gq9gLBJD7jKYx4PDXaBlTpWE9gffZ", - "Rbjx9jHupAacCx3yMzGSKvJnGgdVx0TvhKAnVLlJMqH6wJ/1BAcDZ7LOFXGuiKHrXLCdaZYYnibME3cR", - "6Z7YEhUzmRJWJoKNuhS1jgWA+U9cSuRzJjio/hWjWgrdDR6QF1Kd+XMnOEGp9CA85zKznqesbNXzDrr4", - "6zbqqbOwsZuTinmNP1vp7Hf2Bnv3dga7O4Pdk8HuPvzrDQa7v3W6HUtr1HT2OzE1bMeXcZ3hKRZGBo1s", - "kLKRspGyMU4F8ufti1NRxqNzTyrbBdDV8SNrFNCKncszy3m546Ed5JJ3p+exHjnQhalQs0dgs/Nf19kj", - "nHamfGyZToxPO+FnZ2cULIy8fx1ok5M5j0qqyQVLkt6pOMgbHTxrsxyYvWHQhGsjFY9o4g0gdNcVXtMR", - "qUyzhAZ9uld2HxhiSUobOk175Bfbfm9J4c257K9kCPYfsAJ0F9CYa6KNne+RFJrHbg0BY6Nu2ccQnl0x", - "o6S3kCppvYOvqnt5uCZ8Cik3nIq/S+hUirFHd6AQ3SU0s+uSGDcFB/2ydNwYcBThFOEU4RThFOEU4fRa", - "Iq6uoxpdEoC1jDrDGeHxNqKiVfV+Xz+vDD77KTjq2xBpEGkQaRBpEGlunL5t+5q2vtMszRoPeN/Akaku", - "a6CC0w4Vsfdhi6mhzT5rQdHkqwKdlk4h7lWkpNbFoS34LxF4E5zf2cNMiVheiJ/8rcq3BixDDBcy03mx", - "ckQ0G8NTgobOnyCH7+AAWDPAMSs/Zr4e74DnfZh8fAaTu9oNfQsKpzf/mOW4Y9DWX7i9kMXzbb3w39f1", - "lQ9bxoTidtr78+TgFCXcUahdJGxf2xsSrk3hsebafmEf1fnM2dYaMAx1x+T2V6h+FYr6Rn9tRNqdn67H", - "hiroINBnOn9RI2EKzsozc5/kp8u2p948OST37t17QFyP98gjt3LkeuSEahPc654y+73KhPNs9VfYEckS", - "6qaIM0sqhTiEHrWDUHdObtf7LZ2TL3TQYxFvuHuEvHDJGq20FvLCProg4013kpHX1UXuRdb8b9bQFPdK", - "HbsLmifrMgnyS1FETQsgqiafsr8t44ApDZw4RDSJsoSawASuHbq3tJknfMp+k4LVx1DpvD05vGbzirBO", - "eqfTsPLgpg83fbjpw00fbvpw03e7jSwmOYtve/MHQAvOfrUxYVzkiClVZ06M6QDXzuuoEnm5Zvfnwo8I", - "bjhYI7j9VAiE0SMHZr5QX5Qrl2vwcouJzFxJfssDdrwysXMFImeUTXm5Wgy00SNHhlyAXbKZpT7ay5BZ", - "0RmVE4aHLiRD/wL61oCzHlgs+4bNVaizYd5nsA98G5rvw474Kt3e1nZTXciY+VLLfRtO9cuW1jRJ5AUI", - "BRfPJK+Au1AgYgYA6U09YmkfSMvynpOKaOLC+5j6kIVhS8xHEDO9LuYGTJDS5IRH/ypPNTbvXVjbN2sE", - "3EBTEERoRGhEaERoRGhE6BUI7Uj16icneb26TMN1AcaOSxd3tkMO5SpcpdcdkqDykBiTACkEKQTDc6FL", - "PqIGokYIz6WrHFBK4VtiiffdzuUO9zPUi+0m8ADVXf5f7wTlTTIWTu7nKKSVvqVU9lL9SHGyOth9+t39", - "376/f//gyS8Hz356vLv38tfB4c8PnvwEdULs5c5+539+H+x8//73wc6Dg52f/vHsxcvXOyfvdn6jO5N/", - "nU1FumPOd/5+/2Hv/sf/aHP6Gs4+CTV+RnntXH5RKcxAiAZL/PFzHiCsvC65U2wI1AU6rDbJIaj5Ch3X", - "y7Pi8WVKRcxiPFdFHEMcQ6UQKoWQ1G7hueqVMQ0AJ5osHsI8tF8HKeRT2k6piN2aOKWCp8FGS2UCwvVX", - "OK93KuxIn7GZt6azo/1nP51QzXT/A3w+Y7OPf9rxq/m+D4mj+h/sB1y3eCz3OOY3iBDfb1/LZjusnY5t", - "8Pl1bAhpCGkIaQhpqDREFEUU/TpQ1ALGNagM+5Ht1KTZou8QftcLKrWadEpwJVKk7co8iCg0O6RYe0Tr", - "wlPVKSIryksOQZ0iZt8EPp2y2M7zZOYUkxvzaQnfSDCzQ7ZFtkW2RbZFtkW2RbZFtt3sgTjQzLXQLXgk", - "LKFbu5yAcVmN4jUE11QmJKmySw6NIqlivyIBq0FmXN/VvVNx6Jwh8nj29SmebNlpQkUIdlnD0/AD8vQ6", - "to9uuJFdkV2RXZFdkV2RXZFdkV03yq6AGNfBri5W/BJ4feEuqOpmubETVlaTn54zpe1E9i9neGMtfy5y", - "py8WwXNBkesWtXeuM+0XUy74NJt29nfzWu1wj5nqVBH097l736O6FZEVkRWRFZEVkRWRFZF1m8jqge46", - "mDUToad33JE1NR6VWlgX5GNUunURT9/mVRyWavj6ARVJD0kPSQ9JD0kPSQ9JD0nvKqRXsFGZodZjPVsg", - "izLFzQxA6jCRWXwiz5g4yMyks//7+49d/+2hlGec5V+/t3fa0XQEtnDSnlnmylTS2e9MjEn1fr8vUyZc", - "DO8Ifl907n4uI5os3Le7931v0Bv0dvd/+OGHHzq2av+IHwLtHaSphvL8/w8zbeTUNq705UP/itx5fJky", - "xad2+Uzulq94nVCx5Odqh5Z+eMSG2bhTFyrcr0yHUuhsyhR5LZWhSZ4RkwwznsSEix2apiTTTO2MaGQb", - "GVM9GUqqYu2TFcxkpkgUngtuHskkcQHVOWSj19nUG5EKohhNdlyMx9/fMBqTqVTs/Z3FseCyH8tI98cZ", - "j5nuhxp28gbc7RVU7Zpf86QvpcnNInTQRYcQl5bCFB+PbbshUnmwoqhm1XIBv3UpcYSZKKYnMolDfn5q", - "Z3yXMKEzlePeXM+AIQdNrIRndOrupMkFnWmfMoH53F2e+4vBYFPKk/nioMFmwmauevL9/f/skt3B4D+d", - "Wcfu/cF/elHDFZlKYSbJjBj7CrkonHkuDGG7aOaKL9rnyqcC1jX7zBOapkwAnsTKwiW7TKnQ4Bu43lCK", - "8pj0bfnnnF2Uh7M8aiH2VV1OgFKErCk9A1xMpdbcL9zcdqOLDQpi+pKkisMs1hETVHEJW40JoTrvob8y", - "aajuWmGWUh6HsKreVoapnTACoaweeSTFN4b8K9PG5blwcyThU240kcL17JSqM5f3NqVj9u///f9CdFYz", - "YVNABe6vLC3t9iHsoq9k4kBCujQadiUW2hG+wwcNEoU8f/5i3dGoRNqtG4y6QGQ1GSxCHFo7raFMzkKS", - "ErfIlNpqJ/YF1xMIBAuNIicTpkFg+PQOwA924dFdL569vZJ2Qt5NRAZ/unwtMdN8DMdLeUxcbl8tKzK5", - "FBBsdswEUzyybyodwqI7StglzJdyt1OX4OXcTpFMuyZWpk2PnISgvF1C83TMNHIZkinJBP8rY4TD/mTE", - "maoMsZ5pw6Y+hbF9SAsNYWK1HT8QVnkI5fKIhbGoGaYDPzuB1ELIXCpmbpdqx0Uwn/dC0eiM0CjKFFj6", - "u7DFEJTEtjuEG7aPIGgyMzzSJM1UKrWzIwuzB7LV1LTkBahJYLqAlZrFqfFYsbFl5FIj3ejO4EI3xO5i", - "ORoxVeTgCffa4bObbhm7FddlkyCa/8203VhDUkRuyISP7etOY5qaAHpubIIMsB1RfhLX4M7H9x//bwAA", - "AP//TL2atqlLBwA=", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/openapi.cloud.yaml b/api/openapi.cloud.yaml index 653dfa6fc..9e4da41de 100644 --- a/api/openapi.cloud.yaml +++ b/api/openapi.cloud.yaml @@ -10913,6 +10913,19 @@ components: example: 100 description: The usage in the period description: Usage Record + IDResource: + type: object + required: + - id + properties: + id: + type: string + example: 01G65Z755AFWAKHE12NY0CQ9FH + pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + description: A unique identifier for the resource. + title: ID + readOnly: true + description: IDResource is a resouce with an ID. IngestEventsBody: anyOf: - $ref: '#/components/schemas/Event' @@ -11335,6 +11348,11 @@ components: - $ref: '#/components/schemas/InvoiceLineAppExternalIDs' description: External IDs of the invoice in other apps such as Stripe. readOnly: true + subscriptions: + allOf: + - $ref: '#/components/schemas/InvoiceLineSubscriptionReference' + description: Subscription are the references to the subscritpions that this line is related to. + readOnly: true type: type: string enum: @@ -11601,6 +11619,29 @@ components: - detail - split description: Line status specifies the status of the line. + InvoiceLineSubscriptionReference: + type: object + required: + - subscription + - phase + - item + properties: + subscription: + allOf: + - $ref: '#/components/schemas/IDResource' + description: The subscription. + readOnly: true + phase: + allOf: + - $ref: '#/components/schemas/IDResource' + description: The phase of the subscription. + readOnly: true + item: + allOf: + - $ref: '#/components/schemas/IDResource' + description: The item this line is related to. + readOnly: true + description: InvoiceLineSubscriptionReference contains the references to the subscriptions that this line is related to. InvoiceLineTaxBehavior: type: string enum: @@ -11984,6 +12025,11 @@ components: - $ref: '#/components/schemas/InvoiceLineAppExternalIDs' description: External IDs of the invoice in other apps such as Stripe. readOnly: true + subscriptions: + allOf: + - $ref: '#/components/schemas/InvoiceLineSubscriptionReference' + description: Subscription are the references to the subscritpions that this line is related to. + readOnly: true type: type: string enum: diff --git a/api/openapi.yaml b/api/openapi.yaml index 812b4b6bc..8c617f1a6 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -10603,6 +10603,19 @@ components: example: 100 description: The usage in the period description: Usage Record + IDResource: + type: object + required: + - id + properties: + id: + type: string + example: 01G65Z755AFWAKHE12NY0CQ9FH + pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + description: A unique identifier for the resource. + title: ID + readOnly: true + description: IDResource is a resouce with an ID. IngestEventsBody: anyOf: - $ref: '#/components/schemas/Event' @@ -11025,6 +11038,11 @@ components: - $ref: '#/components/schemas/InvoiceLineAppExternalIDs' description: External IDs of the invoice in other apps such as Stripe. readOnly: true + subscriptions: + allOf: + - $ref: '#/components/schemas/InvoiceLineSubscriptionReference' + description: Subscription are the references to the subscritpions that this line is related to. + readOnly: true type: type: string enum: @@ -11291,6 +11309,29 @@ components: - detail - split description: Line status specifies the status of the line. + InvoiceLineSubscriptionReference: + type: object + required: + - subscription + - phase + - item + properties: + subscription: + allOf: + - $ref: '#/components/schemas/IDResource' + description: The subscription. + readOnly: true + phase: + allOf: + - $ref: '#/components/schemas/IDResource' + description: The phase of the subscription. + readOnly: true + item: + allOf: + - $ref: '#/components/schemas/IDResource' + description: The item this line is related to. + readOnly: true + description: InvoiceLineSubscriptionReference contains the references to the subscriptions that this line is related to. InvoiceLineTaxBehavior: type: string enum: @@ -11674,6 +11715,11 @@ components: - $ref: '#/components/schemas/InvoiceLineAppExternalIDs' description: External IDs of the invoice in other apps such as Stripe. readOnly: true + subscriptions: + allOf: + - $ref: '#/components/schemas/InvoiceLineSubscriptionReference' + description: Subscription are the references to the subscritpions that this line is related to. + readOnly: true type: type: string enum: diff --git a/api/spec/src/billing/invoices/invoice.tsp b/api/spec/src/billing/invoices/invoice.tsp index 921b71857..ab5dc1f9a 100644 --- a/api/spec/src/billing/invoices/invoice.tsp +++ b/api/spec/src/billing/invoices/invoice.tsp @@ -580,6 +580,12 @@ model InvoiceLineBase { */ @visibility("read") externalIDs?: InvoiceLineAppExternalIDs; + + /** + * Subscription are the references to the subscritpions that this line is related to. + */ + @visibility("read") + subscriptions?: InvoiceLineSubscriptionReference; } /** @@ -890,3 +896,27 @@ model InvoiceLineAppExternalIDs { @visibility("read") Tax?: string; } + +/** + * InvoiceLineSubscriptionReference contains the references to the subscriptions that this line is related to. + */ +@friendlyName("InvoiceLineSubscriptionReference") +model InvoiceLineSubscriptionReference { + /** + * The subscription. + */ + @visibility("read") + subscription: IDResource; + + /** + * The phase of the subscription. + */ + @visibility("read") + phase: IDResource; + + /** + * The item this line is related to. + */ + @visibility("read") + item: IDResource; +} diff --git a/api/spec/src/types.tsp b/api/spec/src/types.tsp index c3a1f6498..4cf91a0d4 100644 --- a/api/spec/src/types.tsp +++ b/api/spec/src/types.tsp @@ -78,6 +78,22 @@ model UniqueResource { key: Key; } +/** + * IDResource is a resouce with an ID. + */ +// NOTE: this can be used to have a type, that we can later replace with the expanded type if needed without +// breaking api compatibility +@friendlyName("IDResource") +model IDResource { + /** + * A unique identifier for the resource. + */ + @visibility("read") + @example("01G65Z755AFWAKHE12NY0CQ9FH") + @summary("ID") + id: ULID; +} + /** * Represents common fields of resources. */ diff --git a/openmeter/billing/adapter/invoicelinemapper.go b/openmeter/billing/adapter/invoicelinemapper.go index d508d1edb..84180292c 100644 --- a/openmeter/billing/adapter/invoicelinemapper.go +++ b/openmeter/billing/adapter/invoicelinemapper.go @@ -165,6 +165,14 @@ func (a *adapter) mapInvoiceLineWithoutReferences(dbLine *db.BillingInvoiceLine) }, } + if dbLine.SubscriptionID != nil && dbLine.SubscriptionPhaseID != nil && dbLine.SubscriptionItemID != nil { + invoiceLine.Subscription = &billing.SubscriptionReference{ + SubscriptionID: *dbLine.SubscriptionID, + PhaseID: *dbLine.SubscriptionPhaseID, + ItemID: *dbLine.SubscriptionItemID, + } + } + switch dbLine.Type { case billing.InvoiceLineTypeFee: invoiceLine.FlatFee = billing.FlatFeeLine{ diff --git a/openmeter/billing/adapter/invoicelines.go b/openmeter/billing/adapter/invoicelines.go index bdd83cd3b..0d9229369 100644 --- a/openmeter/billing/adapter/invoicelines.go +++ b/openmeter/billing/adapter/invoicelines.go @@ -102,6 +102,12 @@ func (a *adapter) UpsertInvoiceLines(ctx context.Context, inputIn billing.Upsert // ExternalIDs SetNillableInvoicingAppExternalID(lo.EmptyableToPtr(line.ExternalIDs.Invoicing)) + if line.Subscription != nil { + create = create.SetSubscriptionID(line.Subscription.ItemID). + SetSubscriptionPhaseID(line.Subscription.PhaseID). + SetSubscriptionItemID(line.Subscription.ItemID) + } + if line.TaxConfig != nil { create = create.SetTaxConfig(*line.TaxConfig) } diff --git a/openmeter/billing/httpdriver/invoiceline.go b/openmeter/billing/httpdriver/invoiceline.go index 321251c1c..a79edc46c 100644 --- a/openmeter/billing/httpdriver/invoiceline.go +++ b/openmeter/billing/httpdriver/invoiceline.go @@ -504,6 +504,7 @@ func mapFeeLineToAPI(line *billing.Line) (api.InvoiceLine, error) { ExternalIDs: &api.InvoiceLineAppExternalIDs{ Invoicing: lo.EmptyableToPtr(line.ExternalIDs.Invoicing), }, + Subscriptions: mapSubscriptionReferencesToAPI(line.Subscription), } out := api.InvoiceLine{} @@ -564,6 +565,7 @@ func mapUsageBasedLineToAPI(line *billing.Line) (api.InvoiceLine, error) { ExternalIDs: lo.EmptyableToPtr(api.InvoiceLineAppExternalIDs{ Invoicing: lo.EmptyableToPtr(line.ExternalIDs.Invoicing), }), + Subscriptions: mapSubscriptionReferencesToAPI(line.Subscription), } out := api.InvoiceLine{} @@ -575,6 +577,24 @@ func mapUsageBasedLineToAPI(line *billing.Line) (api.InvoiceLine, error) { return out, nil } +func mapSubscriptionReferencesToAPI(optSub *billing.SubscriptionReference) *api.InvoiceLineSubscriptionReference { + if optSub == nil { + return nil + } + + return &api.InvoiceLineSubscriptionReference{ + Item: api.IDResource{ + Id: optSub.SubscriptionID, + }, + Phase: api.IDResource{ + Id: optSub.PhaseID, + }, + Subscription: api.IDResource{ + Id: optSub.ItemID, + }, + } +} + func mapDiscountsToAPI(optDiscounts billing.LineDiscounts) *[]api.InvoiceLineDiscount { if optDiscounts.IsAbsent() { return nil diff --git a/openmeter/billing/invoiceline.go b/openmeter/billing/invoiceline.go index 0891a10b8..28f0e6255 100644 --- a/openmeter/billing/invoiceline.go +++ b/openmeter/billing/invoiceline.go @@ -128,7 +128,8 @@ type LineBase struct { TaxConfig *TaxConfig `json:"taxOverrides,omitempty"` - ExternalIDs LineExternalIDs `json:"externalIDs,omitempty"` + ExternalIDs LineExternalIDs `json:"externalIDs,omitempty"` + Subscription *SubscriptionReference `json:"subscription,omitempty"` Totals Totals `json:"totals"` } @@ -188,6 +189,12 @@ func (i LineBase) Clone(line *Line) LineBase { return out } +type SubscriptionReference struct { + SubscriptionID string `json:"subscriptionID"` + PhaseID string `json:"phaseID"` + ItemID string `json:"itemID"` +} + type LineExternalIDs struct { Invoicing string `json:"invoicing,omitempty"` } diff --git a/openmeter/ent/db/billinginvoiceline.go b/openmeter/ent/db/billinginvoiceline.go index 68a2c20e5..2257742ca 100644 --- a/openmeter/ent/db/billinginvoiceline.go +++ b/openmeter/ent/db/billinginvoiceline.go @@ -16,6 +16,9 @@ import ( "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceflatfeelineconfig" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceusagebasedlineconfig" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" "github.com/openmeterio/openmeter/openmeter/productcatalog" "github.com/openmeterio/openmeter/pkg/currencyx" ) @@ -77,6 +80,12 @@ type BillingInvoiceLine struct { InvoicingAppExternalID *string `json:"invoicing_app_external_id,omitempty"` // ChildUniqueReferenceID holds the value of the "child_unique_reference_id" field. ChildUniqueReferenceID *string `json:"child_unique_reference_id,omitempty"` + // SubscriptionID holds the value of the "subscription_id" field. + SubscriptionID *string `json:"subscription_id,omitempty"` + // SubscriptionPhaseID holds the value of the "subscription_phase_id" field. + SubscriptionPhaseID *string `json:"subscription_phase_id,omitempty"` + // SubscriptionItemID holds the value of the "subscription_item_id" field. + SubscriptionItemID *string `json:"subscription_item_id,omitempty"` // Edges holds the relations/edges for other nodes in the graph. // The values are being populated by the BillingInvoiceLineQuery when eager-loading is set. Edges BillingInvoiceLineEdges `json:"edges"` @@ -99,9 +108,15 @@ type BillingInvoiceLineEdges struct { DetailedLines []*BillingInvoiceLine `json:"detailed_lines,omitempty"` // LineDiscounts holds the value of the line_discounts edge. LineDiscounts []*BillingInvoiceLineDiscount `json:"line_discounts,omitempty"` + // Subscription holds the value of the subscription edge. + Subscription *Subscription `json:"subscription,omitempty"` + // SubscriptionPhase holds the value of the subscription_phase edge. + SubscriptionPhase *SubscriptionPhase `json:"subscription_phase,omitempty"` + // SubscriptionItem holds the value of the subscription_item edge. + SubscriptionItem *SubscriptionItem `json:"subscription_item,omitempty"` // loadedTypes holds the information for reporting if a // type was loaded (or requested) in eager-loading or not. - loadedTypes [6]bool + loadedTypes [9]bool } // BillingInvoiceOrErr returns the BillingInvoice value or an error if the edge @@ -166,6 +181,39 @@ func (e BillingInvoiceLineEdges) LineDiscountsOrErr() ([]*BillingInvoiceLineDisc return nil, &NotLoadedError{edge: "line_discounts"} } +// SubscriptionOrErr returns the Subscription value or an error if the edge +// was not loaded in eager-loading, or loaded but was not found. +func (e BillingInvoiceLineEdges) SubscriptionOrErr() (*Subscription, error) { + if e.Subscription != nil { + return e.Subscription, nil + } else if e.loadedTypes[6] { + return nil, &NotFoundError{label: subscription.Label} + } + return nil, &NotLoadedError{edge: "subscription"} +} + +// SubscriptionPhaseOrErr returns the SubscriptionPhase value or an error if the edge +// was not loaded in eager-loading, or loaded but was not found. +func (e BillingInvoiceLineEdges) SubscriptionPhaseOrErr() (*SubscriptionPhase, error) { + if e.SubscriptionPhase != nil { + return e.SubscriptionPhase, nil + } else if e.loadedTypes[7] { + return nil, &NotFoundError{label: subscriptionphase.Label} + } + return nil, &NotLoadedError{edge: "subscription_phase"} +} + +// SubscriptionItemOrErr returns the SubscriptionItem value or an error if the edge +// was not loaded in eager-loading, or loaded but was not found. +func (e BillingInvoiceLineEdges) SubscriptionItemOrErr() (*SubscriptionItem, error) { + if e.SubscriptionItem != nil { + return e.SubscriptionItem, nil + } else if e.loadedTypes[8] { + return nil, &NotFoundError{label: subscriptionitem.Label} + } + return nil, &NotLoadedError{edge: "subscription_item"} +} + // scanValues returns the types for scanning values from sql.Rows. func (*BillingInvoiceLine) scanValues(columns []string) ([]any, error) { values := make([]any, len(columns)) @@ -177,7 +225,7 @@ func (*BillingInvoiceLine) scanValues(columns []string) ([]any, error) { values[i] = new([]byte) case billinginvoiceline.FieldAmount, billinginvoiceline.FieldTaxesTotal, billinginvoiceline.FieldTaxesInclusiveTotal, billinginvoiceline.FieldTaxesExclusiveTotal, billinginvoiceline.FieldChargesTotal, billinginvoiceline.FieldDiscountsTotal, billinginvoiceline.FieldTotal: values[i] = new(alpacadecimal.Decimal) - case billinginvoiceline.FieldID, billinginvoiceline.FieldNamespace, billinginvoiceline.FieldName, billinginvoiceline.FieldDescription, billinginvoiceline.FieldInvoiceID, billinginvoiceline.FieldParentLineID, billinginvoiceline.FieldType, billinginvoiceline.FieldStatus, billinginvoiceline.FieldCurrency, billinginvoiceline.FieldInvoicingAppExternalID, billinginvoiceline.FieldChildUniqueReferenceID: + case billinginvoiceline.FieldID, billinginvoiceline.FieldNamespace, billinginvoiceline.FieldName, billinginvoiceline.FieldDescription, billinginvoiceline.FieldInvoiceID, billinginvoiceline.FieldParentLineID, billinginvoiceline.FieldType, billinginvoiceline.FieldStatus, billinginvoiceline.FieldCurrency, billinginvoiceline.FieldInvoicingAppExternalID, billinginvoiceline.FieldChildUniqueReferenceID, billinginvoiceline.FieldSubscriptionID, billinginvoiceline.FieldSubscriptionPhaseID, billinginvoiceline.FieldSubscriptionItemID: values[i] = new(sql.NullString) case billinginvoiceline.FieldCreatedAt, billinginvoiceline.FieldUpdatedAt, billinginvoiceline.FieldDeletedAt, billinginvoiceline.FieldPeriodStart, billinginvoiceline.FieldPeriodEnd, billinginvoiceline.FieldInvoiceAt: values[i] = new(sql.NullTime) @@ -372,6 +420,27 @@ func (bil *BillingInvoiceLine) assignValues(columns []string, values []any) erro bil.ChildUniqueReferenceID = new(string) *bil.ChildUniqueReferenceID = value.String } + case billinginvoiceline.FieldSubscriptionID: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field subscription_id", values[i]) + } else if value.Valid { + bil.SubscriptionID = new(string) + *bil.SubscriptionID = value.String + } + case billinginvoiceline.FieldSubscriptionPhaseID: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field subscription_phase_id", values[i]) + } else if value.Valid { + bil.SubscriptionPhaseID = new(string) + *bil.SubscriptionPhaseID = value.String + } + case billinginvoiceline.FieldSubscriptionItemID: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field subscription_item_id", values[i]) + } else if value.Valid { + bil.SubscriptionItemID = new(string) + *bil.SubscriptionItemID = value.String + } case billinginvoiceline.ForeignKeys[0]: if value, ok := values[i].(*sql.NullString); !ok { return fmt.Errorf("unexpected type %T for field fee_line_config_id", values[i]) @@ -429,6 +498,21 @@ func (bil *BillingInvoiceLine) QueryLineDiscounts() *BillingInvoiceLineDiscountQ return NewBillingInvoiceLineClient(bil.config).QueryLineDiscounts(bil) } +// QuerySubscription queries the "subscription" edge of the BillingInvoiceLine entity. +func (bil *BillingInvoiceLine) QuerySubscription() *SubscriptionQuery { + return NewBillingInvoiceLineClient(bil.config).QuerySubscription(bil) +} + +// QuerySubscriptionPhase queries the "subscription_phase" edge of the BillingInvoiceLine entity. +func (bil *BillingInvoiceLine) QuerySubscriptionPhase() *SubscriptionPhaseQuery { + return NewBillingInvoiceLineClient(bil.config).QuerySubscriptionPhase(bil) +} + +// QuerySubscriptionItem queries the "subscription_item" edge of the BillingInvoiceLine entity. +func (bil *BillingInvoiceLine) QuerySubscriptionItem() *SubscriptionItemQuery { + return NewBillingInvoiceLineClient(bil.config).QuerySubscriptionItem(bil) +} + // Update returns a builder for updating this BillingInvoiceLine. // Note that you need to call BillingInvoiceLine.Unwrap() before calling this method if this BillingInvoiceLine // was returned from a transaction, and the transaction was committed or rolled back. @@ -541,6 +625,21 @@ func (bil *BillingInvoiceLine) String() string { builder.WriteString("child_unique_reference_id=") builder.WriteString(*v) } + builder.WriteString(", ") + if v := bil.SubscriptionID; v != nil { + builder.WriteString("subscription_id=") + builder.WriteString(*v) + } + builder.WriteString(", ") + if v := bil.SubscriptionPhaseID; v != nil { + builder.WriteString("subscription_phase_id=") + builder.WriteString(*v) + } + builder.WriteString(", ") + if v := bil.SubscriptionItemID; v != nil { + builder.WriteString("subscription_item_id=") + builder.WriteString(*v) + } builder.WriteByte(')') return builder.String() } diff --git a/openmeter/ent/db/billinginvoiceline/billinginvoiceline.go b/openmeter/ent/db/billinginvoiceline/billinginvoiceline.go index 47494a53b..a1af29399 100644 --- a/openmeter/ent/db/billinginvoiceline/billinginvoiceline.go +++ b/openmeter/ent/db/billinginvoiceline/billinginvoiceline.go @@ -68,6 +68,12 @@ const ( FieldInvoicingAppExternalID = "invoicing_app_external_id" // FieldChildUniqueReferenceID holds the string denoting the child_unique_reference_id field in the database. FieldChildUniqueReferenceID = "child_unique_reference_id" + // FieldSubscriptionID holds the string denoting the subscription_id field in the database. + FieldSubscriptionID = "subscription_id" + // FieldSubscriptionPhaseID holds the string denoting the subscription_phase_id field in the database. + FieldSubscriptionPhaseID = "subscription_phase_id" + // FieldSubscriptionItemID holds the string denoting the subscription_item_id field in the database. + FieldSubscriptionItemID = "subscription_item_id" // EdgeBillingInvoice holds the string denoting the billing_invoice edge name in mutations. EdgeBillingInvoice = "billing_invoice" // EdgeFlatFeeLine holds the string denoting the flat_fee_line edge name in mutations. @@ -80,6 +86,12 @@ const ( EdgeDetailedLines = "detailed_lines" // EdgeLineDiscounts holds the string denoting the line_discounts edge name in mutations. EdgeLineDiscounts = "line_discounts" + // EdgeSubscription holds the string denoting the subscription edge name in mutations. + EdgeSubscription = "subscription" + // EdgeSubscriptionPhase holds the string denoting the subscription_phase edge name in mutations. + EdgeSubscriptionPhase = "subscription_phase" + // EdgeSubscriptionItem holds the string denoting the subscription_item edge name in mutations. + EdgeSubscriptionItem = "subscription_item" // Table holds the table name of the billinginvoiceline in the database. Table = "billing_invoice_lines" // BillingInvoiceTable is the table that holds the billing_invoice relation/edge. @@ -118,6 +130,27 @@ const ( LineDiscountsInverseTable = "billing_invoice_line_discounts" // LineDiscountsColumn is the table column denoting the line_discounts relation/edge. LineDiscountsColumn = "line_id" + // SubscriptionTable is the table that holds the subscription relation/edge. + SubscriptionTable = "billing_invoice_lines" + // SubscriptionInverseTable is the table name for the Subscription entity. + // It exists in this package in order to avoid circular dependency with the "subscription" package. + SubscriptionInverseTable = "subscriptions" + // SubscriptionColumn is the table column denoting the subscription relation/edge. + SubscriptionColumn = "subscription_id" + // SubscriptionPhaseTable is the table that holds the subscription_phase relation/edge. + SubscriptionPhaseTable = "billing_invoice_lines" + // SubscriptionPhaseInverseTable is the table name for the SubscriptionPhase entity. + // It exists in this package in order to avoid circular dependency with the "subscriptionphase" package. + SubscriptionPhaseInverseTable = "subscription_phases" + // SubscriptionPhaseColumn is the table column denoting the subscription_phase relation/edge. + SubscriptionPhaseColumn = "subscription_phase_id" + // SubscriptionItemTable is the table that holds the subscription_item relation/edge. + SubscriptionItemTable = "billing_invoice_lines" + // SubscriptionItemInverseTable is the table name for the SubscriptionItem entity. + // It exists in this package in order to avoid circular dependency with the "subscriptionitem" package. + SubscriptionItemInverseTable = "subscription_items" + // SubscriptionItemColumn is the table column denoting the subscription_item relation/edge. + SubscriptionItemColumn = "subscription_item_id" ) // Columns holds all SQL columns for billinginvoiceline fields. @@ -149,6 +182,9 @@ var Columns = []string{ FieldTaxConfig, FieldInvoicingAppExternalID, FieldChildUniqueReferenceID, + FieldSubscriptionID, + FieldSubscriptionPhaseID, + FieldSubscriptionItemID, } // ForeignKeys holds the SQL foreign-keys that are owned by the "billing_invoice_lines" @@ -336,6 +372,21 @@ func ByChildUniqueReferenceID(opts ...sql.OrderTermOption) OrderOption { return sql.OrderByField(FieldChildUniqueReferenceID, opts...).ToFunc() } +// BySubscriptionID orders the results by the subscription_id field. +func BySubscriptionID(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldSubscriptionID, opts...).ToFunc() +} + +// BySubscriptionPhaseID orders the results by the subscription_phase_id field. +func BySubscriptionPhaseID(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldSubscriptionPhaseID, opts...).ToFunc() +} + +// BySubscriptionItemID orders the results by the subscription_item_id field. +func BySubscriptionItemID(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldSubscriptionItemID, opts...).ToFunc() +} + // ByBillingInvoiceField orders the results by billing_invoice field. func ByBillingInvoiceField(field string, opts ...sql.OrderTermOption) OrderOption { return func(s *sql.Selector) { @@ -391,6 +442,27 @@ func ByLineDiscounts(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { sqlgraph.OrderByNeighborTerms(s, newLineDiscountsStep(), append([]sql.OrderTerm{term}, terms...)...) } } + +// BySubscriptionField orders the results by subscription field. +func BySubscriptionField(field string, opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newSubscriptionStep(), sql.OrderByField(field, opts...)) + } +} + +// BySubscriptionPhaseField orders the results by subscription_phase field. +func BySubscriptionPhaseField(field string, opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newSubscriptionPhaseStep(), sql.OrderByField(field, opts...)) + } +} + +// BySubscriptionItemField orders the results by subscription_item field. +func BySubscriptionItemField(field string, opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newSubscriptionItemStep(), sql.OrderByField(field, opts...)) + } +} func newBillingInvoiceStep() *sqlgraph.Step { return sqlgraph.NewStep( sqlgraph.From(Table, FieldID), @@ -433,3 +505,24 @@ func newLineDiscountsStep() *sqlgraph.Step { sqlgraph.Edge(sqlgraph.O2M, false, LineDiscountsTable, LineDiscountsColumn), ) } +func newSubscriptionStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(SubscriptionInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, SubscriptionTable, SubscriptionColumn), + ) +} +func newSubscriptionPhaseStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(SubscriptionPhaseInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, SubscriptionPhaseTable, SubscriptionPhaseColumn), + ) +} +func newSubscriptionItemStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(SubscriptionItemInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, SubscriptionItemTable, SubscriptionItemColumn), + ) +} diff --git a/openmeter/ent/db/billinginvoiceline/where.go b/openmeter/ent/db/billinginvoiceline/where.go index 53ca2ab59..75fe28177 100644 --- a/openmeter/ent/db/billinginvoiceline/where.go +++ b/openmeter/ent/db/billinginvoiceline/where.go @@ -179,6 +179,21 @@ func ChildUniqueReferenceID(v string) predicate.BillingInvoiceLine { return predicate.BillingInvoiceLine(sql.FieldEQ(FieldChildUniqueReferenceID, v)) } +// SubscriptionID applies equality check predicate on the "subscription_id" field. It's identical to SubscriptionIDEQ. +func SubscriptionID(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEQ(FieldSubscriptionID, v)) +} + +// SubscriptionPhaseID applies equality check predicate on the "subscription_phase_id" field. It's identical to SubscriptionPhaseIDEQ. +func SubscriptionPhaseID(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEQ(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionItemID applies equality check predicate on the "subscription_item_id" field. It's identical to SubscriptionItemIDEQ. +func SubscriptionItemID(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEQ(FieldSubscriptionItemID, v)) +} + // NamespaceEQ applies the EQ predicate on the "namespace" field. func NamespaceEQ(v string) predicate.BillingInvoiceLine { return predicate.BillingInvoiceLine(sql.FieldEQ(FieldNamespace, v)) @@ -1418,6 +1433,231 @@ func ChildUniqueReferenceIDContainsFold(v string) predicate.BillingInvoiceLine { return predicate.BillingInvoiceLine(sql.FieldContainsFold(FieldChildUniqueReferenceID, v)) } +// SubscriptionIDEQ applies the EQ predicate on the "subscription_id" field. +func SubscriptionIDEQ(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEQ(FieldSubscriptionID, v)) +} + +// SubscriptionIDNEQ applies the NEQ predicate on the "subscription_id" field. +func SubscriptionIDNEQ(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNEQ(FieldSubscriptionID, v)) +} + +// SubscriptionIDIn applies the In predicate on the "subscription_id" field. +func SubscriptionIDIn(vs ...string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldIn(FieldSubscriptionID, vs...)) +} + +// SubscriptionIDNotIn applies the NotIn predicate on the "subscription_id" field. +func SubscriptionIDNotIn(vs ...string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNotIn(FieldSubscriptionID, vs...)) +} + +// SubscriptionIDGT applies the GT predicate on the "subscription_id" field. +func SubscriptionIDGT(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldGT(FieldSubscriptionID, v)) +} + +// SubscriptionIDGTE applies the GTE predicate on the "subscription_id" field. +func SubscriptionIDGTE(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldGTE(FieldSubscriptionID, v)) +} + +// SubscriptionIDLT applies the LT predicate on the "subscription_id" field. +func SubscriptionIDLT(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldLT(FieldSubscriptionID, v)) +} + +// SubscriptionIDLTE applies the LTE predicate on the "subscription_id" field. +func SubscriptionIDLTE(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldLTE(FieldSubscriptionID, v)) +} + +// SubscriptionIDContains applies the Contains predicate on the "subscription_id" field. +func SubscriptionIDContains(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldContains(FieldSubscriptionID, v)) +} + +// SubscriptionIDHasPrefix applies the HasPrefix predicate on the "subscription_id" field. +func SubscriptionIDHasPrefix(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldHasPrefix(FieldSubscriptionID, v)) +} + +// SubscriptionIDHasSuffix applies the HasSuffix predicate on the "subscription_id" field. +func SubscriptionIDHasSuffix(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldHasSuffix(FieldSubscriptionID, v)) +} + +// SubscriptionIDIsNil applies the IsNil predicate on the "subscription_id" field. +func SubscriptionIDIsNil() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldIsNull(FieldSubscriptionID)) +} + +// SubscriptionIDNotNil applies the NotNil predicate on the "subscription_id" field. +func SubscriptionIDNotNil() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNotNull(FieldSubscriptionID)) +} + +// SubscriptionIDEqualFold applies the EqualFold predicate on the "subscription_id" field. +func SubscriptionIDEqualFold(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEqualFold(FieldSubscriptionID, v)) +} + +// SubscriptionIDContainsFold applies the ContainsFold predicate on the "subscription_id" field. +func SubscriptionIDContainsFold(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldContainsFold(FieldSubscriptionID, v)) +} + +// SubscriptionPhaseIDEQ applies the EQ predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDEQ(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEQ(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDNEQ applies the NEQ predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDNEQ(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNEQ(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDIn applies the In predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDIn(vs ...string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldIn(FieldSubscriptionPhaseID, vs...)) +} + +// SubscriptionPhaseIDNotIn applies the NotIn predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDNotIn(vs ...string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNotIn(FieldSubscriptionPhaseID, vs...)) +} + +// SubscriptionPhaseIDGT applies the GT predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDGT(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldGT(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDGTE applies the GTE predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDGTE(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldGTE(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDLT applies the LT predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDLT(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldLT(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDLTE applies the LTE predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDLTE(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldLTE(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDContains applies the Contains predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDContains(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldContains(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDHasPrefix applies the HasPrefix predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDHasPrefix(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldHasPrefix(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDHasSuffix applies the HasSuffix predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDHasSuffix(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldHasSuffix(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDIsNil applies the IsNil predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDIsNil() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldIsNull(FieldSubscriptionPhaseID)) +} + +// SubscriptionPhaseIDNotNil applies the NotNil predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDNotNil() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNotNull(FieldSubscriptionPhaseID)) +} + +// SubscriptionPhaseIDEqualFold applies the EqualFold predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDEqualFold(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEqualFold(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionPhaseIDContainsFold applies the ContainsFold predicate on the "subscription_phase_id" field. +func SubscriptionPhaseIDContainsFold(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldContainsFold(FieldSubscriptionPhaseID, v)) +} + +// SubscriptionItemIDEQ applies the EQ predicate on the "subscription_item_id" field. +func SubscriptionItemIDEQ(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEQ(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDNEQ applies the NEQ predicate on the "subscription_item_id" field. +func SubscriptionItemIDNEQ(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNEQ(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDIn applies the In predicate on the "subscription_item_id" field. +func SubscriptionItemIDIn(vs ...string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldIn(FieldSubscriptionItemID, vs...)) +} + +// SubscriptionItemIDNotIn applies the NotIn predicate on the "subscription_item_id" field. +func SubscriptionItemIDNotIn(vs ...string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNotIn(FieldSubscriptionItemID, vs...)) +} + +// SubscriptionItemIDGT applies the GT predicate on the "subscription_item_id" field. +func SubscriptionItemIDGT(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldGT(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDGTE applies the GTE predicate on the "subscription_item_id" field. +func SubscriptionItemIDGTE(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldGTE(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDLT applies the LT predicate on the "subscription_item_id" field. +func SubscriptionItemIDLT(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldLT(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDLTE applies the LTE predicate on the "subscription_item_id" field. +func SubscriptionItemIDLTE(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldLTE(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDContains applies the Contains predicate on the "subscription_item_id" field. +func SubscriptionItemIDContains(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldContains(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDHasPrefix applies the HasPrefix predicate on the "subscription_item_id" field. +func SubscriptionItemIDHasPrefix(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldHasPrefix(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDHasSuffix applies the HasSuffix predicate on the "subscription_item_id" field. +func SubscriptionItemIDHasSuffix(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldHasSuffix(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDIsNil applies the IsNil predicate on the "subscription_item_id" field. +func SubscriptionItemIDIsNil() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldIsNull(FieldSubscriptionItemID)) +} + +// SubscriptionItemIDNotNil applies the NotNil predicate on the "subscription_item_id" field. +func SubscriptionItemIDNotNil() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldNotNull(FieldSubscriptionItemID)) +} + +// SubscriptionItemIDEqualFold applies the EqualFold predicate on the "subscription_item_id" field. +func SubscriptionItemIDEqualFold(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldEqualFold(FieldSubscriptionItemID, v)) +} + +// SubscriptionItemIDContainsFold applies the ContainsFold predicate on the "subscription_item_id" field. +func SubscriptionItemIDContainsFold(v string) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(sql.FieldContainsFold(FieldSubscriptionItemID, v)) +} + // HasBillingInvoice applies the HasEdge predicate on the "billing_invoice" edge. func HasBillingInvoice() predicate.BillingInvoiceLine { return predicate.BillingInvoiceLine(func(s *sql.Selector) { @@ -1556,6 +1796,75 @@ func HasLineDiscountsWith(preds ...predicate.BillingInvoiceLineDiscount) predica }) } +// HasSubscription applies the HasEdge predicate on the "subscription" edge. +func HasSubscription() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, SubscriptionTable, SubscriptionColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasSubscriptionWith applies the HasEdge predicate on the "subscription" edge with a given conditions (other predicates). +func HasSubscriptionWith(preds ...predicate.Subscription) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(func(s *sql.Selector) { + step := newSubscriptionStep() + sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) { + for _, p := range preds { + p(s) + } + }) + }) +} + +// HasSubscriptionPhase applies the HasEdge predicate on the "subscription_phase" edge. +func HasSubscriptionPhase() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, SubscriptionPhaseTable, SubscriptionPhaseColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasSubscriptionPhaseWith applies the HasEdge predicate on the "subscription_phase" edge with a given conditions (other predicates). +func HasSubscriptionPhaseWith(preds ...predicate.SubscriptionPhase) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(func(s *sql.Selector) { + step := newSubscriptionPhaseStep() + sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) { + for _, p := range preds { + p(s) + } + }) + }) +} + +// HasSubscriptionItem applies the HasEdge predicate on the "subscription_item" edge. +func HasSubscriptionItem() predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, SubscriptionItemTable, SubscriptionItemColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasSubscriptionItemWith applies the HasEdge predicate on the "subscription_item" edge with a given conditions (other predicates). +func HasSubscriptionItemWith(preds ...predicate.SubscriptionItem) predicate.BillingInvoiceLine { + return predicate.BillingInvoiceLine(func(s *sql.Selector) { + step := newSubscriptionItemStep() + sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) { + for _, p := range preds { + p(s) + } + }) + }) +} + // And groups predicates with the AND operator between them. func And(predicates ...predicate.BillingInvoiceLine) predicate.BillingInvoiceLine { return predicate.BillingInvoiceLine(sql.AndPredicates(predicates...)) diff --git a/openmeter/ent/db/billinginvoiceline_create.go b/openmeter/ent/db/billinginvoiceline_create.go index 0c0e7431a..18d3aa081 100644 --- a/openmeter/ent/db/billinginvoiceline_create.go +++ b/openmeter/ent/db/billinginvoiceline_create.go @@ -19,6 +19,9 @@ import ( "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoicelinediscount" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceusagebasedlineconfig" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" "github.com/openmeterio/openmeter/openmeter/productcatalog" "github.com/openmeterio/openmeter/pkg/currencyx" ) @@ -259,6 +262,48 @@ func (bilc *BillingInvoiceLineCreate) SetNillableChildUniqueReferenceID(s *strin return bilc } +// SetSubscriptionID sets the "subscription_id" field. +func (bilc *BillingInvoiceLineCreate) SetSubscriptionID(s string) *BillingInvoiceLineCreate { + bilc.mutation.SetSubscriptionID(s) + return bilc +} + +// SetNillableSubscriptionID sets the "subscription_id" field if the given value is not nil. +func (bilc *BillingInvoiceLineCreate) SetNillableSubscriptionID(s *string) *BillingInvoiceLineCreate { + if s != nil { + bilc.SetSubscriptionID(*s) + } + return bilc +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (bilc *BillingInvoiceLineCreate) SetSubscriptionPhaseID(s string) *BillingInvoiceLineCreate { + bilc.mutation.SetSubscriptionPhaseID(s) + return bilc +} + +// SetNillableSubscriptionPhaseID sets the "subscription_phase_id" field if the given value is not nil. +func (bilc *BillingInvoiceLineCreate) SetNillableSubscriptionPhaseID(s *string) *BillingInvoiceLineCreate { + if s != nil { + bilc.SetSubscriptionPhaseID(*s) + } + return bilc +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (bilc *BillingInvoiceLineCreate) SetSubscriptionItemID(s string) *BillingInvoiceLineCreate { + bilc.mutation.SetSubscriptionItemID(s) + return bilc +} + +// SetNillableSubscriptionItemID sets the "subscription_item_id" field if the given value is not nil. +func (bilc *BillingInvoiceLineCreate) SetNillableSubscriptionItemID(s *string) *BillingInvoiceLineCreate { + if s != nil { + bilc.SetSubscriptionItemID(*s) + } + return bilc +} + // SetID sets the "id" field. func (bilc *BillingInvoiceLineCreate) SetID(s string) *BillingInvoiceLineCreate { bilc.mutation.SetID(s) @@ -357,6 +402,21 @@ func (bilc *BillingInvoiceLineCreate) AddLineDiscounts(b ...*BillingInvoiceLineD return bilc.AddLineDiscountIDs(ids...) } +// SetSubscription sets the "subscription" edge to the Subscription entity. +func (bilc *BillingInvoiceLineCreate) SetSubscription(s *Subscription) *BillingInvoiceLineCreate { + return bilc.SetSubscriptionID(s.ID) +} + +// SetSubscriptionPhase sets the "subscription_phase" edge to the SubscriptionPhase entity. +func (bilc *BillingInvoiceLineCreate) SetSubscriptionPhase(s *SubscriptionPhase) *BillingInvoiceLineCreate { + return bilc.SetSubscriptionPhaseID(s.ID) +} + +// SetSubscriptionItem sets the "subscription_item" edge to the SubscriptionItem entity. +func (bilc *BillingInvoiceLineCreate) SetSubscriptionItem(s *SubscriptionItem) *BillingInvoiceLineCreate { + return bilc.SetSubscriptionItemID(s.ID) +} + // Mutation returns the BillingInvoiceLineMutation object of the builder. func (bilc *BillingInvoiceLineCreate) Mutation() *BillingInvoiceLineMutation { return bilc.mutation @@ -722,6 +782,57 @@ func (bilc *BillingInvoiceLineCreate) createSpec() (*BillingInvoiceLine, *sqlgra } _spec.Edges = append(_spec.Edges, edge) } + if nodes := bilc.mutation.SubscriptionIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionTable, + Columns: []string{billinginvoiceline.SubscriptionColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscription.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _node.SubscriptionID = &nodes[0] + _spec.Edges = append(_spec.Edges, edge) + } + if nodes := bilc.mutation.SubscriptionPhaseIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionPhaseTable, + Columns: []string{billinginvoiceline.SubscriptionPhaseColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionphase.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _node.SubscriptionPhaseID = &nodes[0] + _spec.Edges = append(_spec.Edges, edge) + } + if nodes := bilc.mutation.SubscriptionItemIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionItemTable, + Columns: []string{billinginvoiceline.SubscriptionItemColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionitem.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _node.SubscriptionItemID = &nodes[0] + _spec.Edges = append(_spec.Edges, edge) + } return _node, _spec } @@ -1086,6 +1197,60 @@ func (u *BillingInvoiceLineUpsert) ClearChildUniqueReferenceID() *BillingInvoice return u } +// SetSubscriptionID sets the "subscription_id" field. +func (u *BillingInvoiceLineUpsert) SetSubscriptionID(v string) *BillingInvoiceLineUpsert { + u.Set(billinginvoiceline.FieldSubscriptionID, v) + return u +} + +// UpdateSubscriptionID sets the "subscription_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsert) UpdateSubscriptionID() *BillingInvoiceLineUpsert { + u.SetExcluded(billinginvoiceline.FieldSubscriptionID) + return u +} + +// ClearSubscriptionID clears the value of the "subscription_id" field. +func (u *BillingInvoiceLineUpsert) ClearSubscriptionID() *BillingInvoiceLineUpsert { + u.SetNull(billinginvoiceline.FieldSubscriptionID) + return u +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (u *BillingInvoiceLineUpsert) SetSubscriptionPhaseID(v string) *BillingInvoiceLineUpsert { + u.Set(billinginvoiceline.FieldSubscriptionPhaseID, v) + return u +} + +// UpdateSubscriptionPhaseID sets the "subscription_phase_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsert) UpdateSubscriptionPhaseID() *BillingInvoiceLineUpsert { + u.SetExcluded(billinginvoiceline.FieldSubscriptionPhaseID) + return u +} + +// ClearSubscriptionPhaseID clears the value of the "subscription_phase_id" field. +func (u *BillingInvoiceLineUpsert) ClearSubscriptionPhaseID() *BillingInvoiceLineUpsert { + u.SetNull(billinginvoiceline.FieldSubscriptionPhaseID) + return u +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (u *BillingInvoiceLineUpsert) SetSubscriptionItemID(v string) *BillingInvoiceLineUpsert { + u.Set(billinginvoiceline.FieldSubscriptionItemID, v) + return u +} + +// UpdateSubscriptionItemID sets the "subscription_item_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsert) UpdateSubscriptionItemID() *BillingInvoiceLineUpsert { + u.SetExcluded(billinginvoiceline.FieldSubscriptionItemID) + return u +} + +// ClearSubscriptionItemID clears the value of the "subscription_item_id" field. +func (u *BillingInvoiceLineUpsert) ClearSubscriptionItemID() *BillingInvoiceLineUpsert { + u.SetNull(billinginvoiceline.FieldSubscriptionItemID) + return u +} + // UpdateNewValues updates the mutable fields using the new values that were set on create except the ID field. // Using this option is equivalent to using: // @@ -1510,6 +1675,69 @@ func (u *BillingInvoiceLineUpsertOne) ClearChildUniqueReferenceID() *BillingInvo }) } +// SetSubscriptionID sets the "subscription_id" field. +func (u *BillingInvoiceLineUpsertOne) SetSubscriptionID(v string) *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.SetSubscriptionID(v) + }) +} + +// UpdateSubscriptionID sets the "subscription_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsertOne) UpdateSubscriptionID() *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.UpdateSubscriptionID() + }) +} + +// ClearSubscriptionID clears the value of the "subscription_id" field. +func (u *BillingInvoiceLineUpsertOne) ClearSubscriptionID() *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.ClearSubscriptionID() + }) +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (u *BillingInvoiceLineUpsertOne) SetSubscriptionPhaseID(v string) *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.SetSubscriptionPhaseID(v) + }) +} + +// UpdateSubscriptionPhaseID sets the "subscription_phase_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsertOne) UpdateSubscriptionPhaseID() *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.UpdateSubscriptionPhaseID() + }) +} + +// ClearSubscriptionPhaseID clears the value of the "subscription_phase_id" field. +func (u *BillingInvoiceLineUpsertOne) ClearSubscriptionPhaseID() *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.ClearSubscriptionPhaseID() + }) +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (u *BillingInvoiceLineUpsertOne) SetSubscriptionItemID(v string) *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.SetSubscriptionItemID(v) + }) +} + +// UpdateSubscriptionItemID sets the "subscription_item_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsertOne) UpdateSubscriptionItemID() *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.UpdateSubscriptionItemID() + }) +} + +// ClearSubscriptionItemID clears the value of the "subscription_item_id" field. +func (u *BillingInvoiceLineUpsertOne) ClearSubscriptionItemID() *BillingInvoiceLineUpsertOne { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.ClearSubscriptionItemID() + }) +} + // Exec executes the query. func (u *BillingInvoiceLineUpsertOne) Exec(ctx context.Context) error { if len(u.create.conflict) == 0 { @@ -2101,6 +2329,69 @@ func (u *BillingInvoiceLineUpsertBulk) ClearChildUniqueReferenceID() *BillingInv }) } +// SetSubscriptionID sets the "subscription_id" field. +func (u *BillingInvoiceLineUpsertBulk) SetSubscriptionID(v string) *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.SetSubscriptionID(v) + }) +} + +// UpdateSubscriptionID sets the "subscription_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsertBulk) UpdateSubscriptionID() *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.UpdateSubscriptionID() + }) +} + +// ClearSubscriptionID clears the value of the "subscription_id" field. +func (u *BillingInvoiceLineUpsertBulk) ClearSubscriptionID() *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.ClearSubscriptionID() + }) +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (u *BillingInvoiceLineUpsertBulk) SetSubscriptionPhaseID(v string) *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.SetSubscriptionPhaseID(v) + }) +} + +// UpdateSubscriptionPhaseID sets the "subscription_phase_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsertBulk) UpdateSubscriptionPhaseID() *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.UpdateSubscriptionPhaseID() + }) +} + +// ClearSubscriptionPhaseID clears the value of the "subscription_phase_id" field. +func (u *BillingInvoiceLineUpsertBulk) ClearSubscriptionPhaseID() *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.ClearSubscriptionPhaseID() + }) +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (u *BillingInvoiceLineUpsertBulk) SetSubscriptionItemID(v string) *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.SetSubscriptionItemID(v) + }) +} + +// UpdateSubscriptionItemID sets the "subscription_item_id" field to the value that was provided on create. +func (u *BillingInvoiceLineUpsertBulk) UpdateSubscriptionItemID() *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.UpdateSubscriptionItemID() + }) +} + +// ClearSubscriptionItemID clears the value of the "subscription_item_id" field. +func (u *BillingInvoiceLineUpsertBulk) ClearSubscriptionItemID() *BillingInvoiceLineUpsertBulk { + return u.Update(func(s *BillingInvoiceLineUpsert) { + s.ClearSubscriptionItemID() + }) +} + // Exec executes the query. func (u *BillingInvoiceLineUpsertBulk) Exec(ctx context.Context) error { if u.create.err != nil { diff --git a/openmeter/ent/db/billinginvoiceline_query.go b/openmeter/ent/db/billinginvoiceline_query.go index 6ef857410..554b7f389 100644 --- a/openmeter/ent/db/billinginvoiceline_query.go +++ b/openmeter/ent/db/billinginvoiceline_query.go @@ -19,23 +19,29 @@ import ( "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoicelinediscount" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceusagebasedlineconfig" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" ) // BillingInvoiceLineQuery is the builder for querying BillingInvoiceLine entities. type BillingInvoiceLineQuery struct { config - ctx *QueryContext - order []billinginvoiceline.OrderOption - inters []Interceptor - predicates []predicate.BillingInvoiceLine - withBillingInvoice *BillingInvoiceQuery - withFlatFeeLine *BillingInvoiceFlatFeeLineConfigQuery - withUsageBasedLine *BillingInvoiceUsageBasedLineConfigQuery - withParentLine *BillingInvoiceLineQuery - withDetailedLines *BillingInvoiceLineQuery - withLineDiscounts *BillingInvoiceLineDiscountQuery - withFKs bool - modifiers []func(*sql.Selector) + ctx *QueryContext + order []billinginvoiceline.OrderOption + inters []Interceptor + predicates []predicate.BillingInvoiceLine + withBillingInvoice *BillingInvoiceQuery + withFlatFeeLine *BillingInvoiceFlatFeeLineConfigQuery + withUsageBasedLine *BillingInvoiceUsageBasedLineConfigQuery + withParentLine *BillingInvoiceLineQuery + withDetailedLines *BillingInvoiceLineQuery + withLineDiscounts *BillingInvoiceLineDiscountQuery + withSubscription *SubscriptionQuery + withSubscriptionPhase *SubscriptionPhaseQuery + withSubscriptionItem *SubscriptionItemQuery + withFKs bool + modifiers []func(*sql.Selector) // intermediate query (i.e. traversal path). sql *sql.Selector path func(context.Context) (*sql.Selector, error) @@ -204,6 +210,72 @@ func (bilq *BillingInvoiceLineQuery) QueryLineDiscounts() *BillingInvoiceLineDis return query } +// QuerySubscription chains the current query on the "subscription" edge. +func (bilq *BillingInvoiceLineQuery) QuerySubscription() *SubscriptionQuery { + query := (&SubscriptionClient{config: bilq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := bilq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := bilq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(billinginvoiceline.Table, billinginvoiceline.FieldID, selector), + sqlgraph.To(subscription.Table, subscription.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, billinginvoiceline.SubscriptionTable, billinginvoiceline.SubscriptionColumn), + ) + fromU = sqlgraph.SetNeighbors(bilq.driver.Dialect(), step) + return fromU, nil + } + return query +} + +// QuerySubscriptionPhase chains the current query on the "subscription_phase" edge. +func (bilq *BillingInvoiceLineQuery) QuerySubscriptionPhase() *SubscriptionPhaseQuery { + query := (&SubscriptionPhaseClient{config: bilq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := bilq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := bilq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(billinginvoiceline.Table, billinginvoiceline.FieldID, selector), + sqlgraph.To(subscriptionphase.Table, subscriptionphase.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, billinginvoiceline.SubscriptionPhaseTable, billinginvoiceline.SubscriptionPhaseColumn), + ) + fromU = sqlgraph.SetNeighbors(bilq.driver.Dialect(), step) + return fromU, nil + } + return query +} + +// QuerySubscriptionItem chains the current query on the "subscription_item" edge. +func (bilq *BillingInvoiceLineQuery) QuerySubscriptionItem() *SubscriptionItemQuery { + query := (&SubscriptionItemClient{config: bilq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := bilq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := bilq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(billinginvoiceline.Table, billinginvoiceline.FieldID, selector), + sqlgraph.To(subscriptionitem.Table, subscriptionitem.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, billinginvoiceline.SubscriptionItemTable, billinginvoiceline.SubscriptionItemColumn), + ) + fromU = sqlgraph.SetNeighbors(bilq.driver.Dialect(), step) + return fromU, nil + } + return query +} + // First returns the first BillingInvoiceLine entity from the query. // Returns a *NotFoundError when no BillingInvoiceLine was found. func (bilq *BillingInvoiceLineQuery) First(ctx context.Context) (*BillingInvoiceLine, error) { @@ -391,17 +463,20 @@ func (bilq *BillingInvoiceLineQuery) Clone() *BillingInvoiceLineQuery { return nil } return &BillingInvoiceLineQuery{ - config: bilq.config, - ctx: bilq.ctx.Clone(), - order: append([]billinginvoiceline.OrderOption{}, bilq.order...), - inters: append([]Interceptor{}, bilq.inters...), - predicates: append([]predicate.BillingInvoiceLine{}, bilq.predicates...), - withBillingInvoice: bilq.withBillingInvoice.Clone(), - withFlatFeeLine: bilq.withFlatFeeLine.Clone(), - withUsageBasedLine: bilq.withUsageBasedLine.Clone(), - withParentLine: bilq.withParentLine.Clone(), - withDetailedLines: bilq.withDetailedLines.Clone(), - withLineDiscounts: bilq.withLineDiscounts.Clone(), + config: bilq.config, + ctx: bilq.ctx.Clone(), + order: append([]billinginvoiceline.OrderOption{}, bilq.order...), + inters: append([]Interceptor{}, bilq.inters...), + predicates: append([]predicate.BillingInvoiceLine{}, bilq.predicates...), + withBillingInvoice: bilq.withBillingInvoice.Clone(), + withFlatFeeLine: bilq.withFlatFeeLine.Clone(), + withUsageBasedLine: bilq.withUsageBasedLine.Clone(), + withParentLine: bilq.withParentLine.Clone(), + withDetailedLines: bilq.withDetailedLines.Clone(), + withLineDiscounts: bilq.withLineDiscounts.Clone(), + withSubscription: bilq.withSubscription.Clone(), + withSubscriptionPhase: bilq.withSubscriptionPhase.Clone(), + withSubscriptionItem: bilq.withSubscriptionItem.Clone(), // clone intermediate query. sql: bilq.sql.Clone(), path: bilq.path, @@ -474,6 +549,39 @@ func (bilq *BillingInvoiceLineQuery) WithLineDiscounts(opts ...func(*BillingInvo return bilq } +// WithSubscription tells the query-builder to eager-load the nodes that are connected to +// the "subscription" edge. The optional arguments are used to configure the query builder of the edge. +func (bilq *BillingInvoiceLineQuery) WithSubscription(opts ...func(*SubscriptionQuery)) *BillingInvoiceLineQuery { + query := (&SubscriptionClient{config: bilq.config}).Query() + for _, opt := range opts { + opt(query) + } + bilq.withSubscription = query + return bilq +} + +// WithSubscriptionPhase tells the query-builder to eager-load the nodes that are connected to +// the "subscription_phase" edge. The optional arguments are used to configure the query builder of the edge. +func (bilq *BillingInvoiceLineQuery) WithSubscriptionPhase(opts ...func(*SubscriptionPhaseQuery)) *BillingInvoiceLineQuery { + query := (&SubscriptionPhaseClient{config: bilq.config}).Query() + for _, opt := range opts { + opt(query) + } + bilq.withSubscriptionPhase = query + return bilq +} + +// WithSubscriptionItem tells the query-builder to eager-load the nodes that are connected to +// the "subscription_item" edge. The optional arguments are used to configure the query builder of the edge. +func (bilq *BillingInvoiceLineQuery) WithSubscriptionItem(opts ...func(*SubscriptionItemQuery)) *BillingInvoiceLineQuery { + query := (&SubscriptionItemClient{config: bilq.config}).Query() + for _, opt := range opts { + opt(query) + } + bilq.withSubscriptionItem = query + return bilq +} + // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. // @@ -553,13 +661,16 @@ func (bilq *BillingInvoiceLineQuery) sqlAll(ctx context.Context, hooks ...queryH nodes = []*BillingInvoiceLine{} withFKs = bilq.withFKs _spec = bilq.querySpec() - loadedTypes = [6]bool{ + loadedTypes = [9]bool{ bilq.withBillingInvoice != nil, bilq.withFlatFeeLine != nil, bilq.withUsageBasedLine != nil, bilq.withParentLine != nil, bilq.withDetailedLines != nil, bilq.withLineDiscounts != nil, + bilq.withSubscription != nil, + bilq.withSubscriptionPhase != nil, + bilq.withSubscriptionItem != nil, } ) if bilq.withFlatFeeLine != nil || bilq.withUsageBasedLine != nil { @@ -631,6 +742,24 @@ func (bilq *BillingInvoiceLineQuery) sqlAll(ctx context.Context, hooks ...queryH return nil, err } } + if query := bilq.withSubscription; query != nil { + if err := bilq.loadSubscription(ctx, query, nodes, nil, + func(n *BillingInvoiceLine, e *Subscription) { n.Edges.Subscription = e }); err != nil { + return nil, err + } + } + if query := bilq.withSubscriptionPhase; query != nil { + if err := bilq.loadSubscriptionPhase(ctx, query, nodes, nil, + func(n *BillingInvoiceLine, e *SubscriptionPhase) { n.Edges.SubscriptionPhase = e }); err != nil { + return nil, err + } + } + if query := bilq.withSubscriptionItem; query != nil { + if err := bilq.loadSubscriptionItem(ctx, query, nodes, nil, + func(n *BillingInvoiceLine, e *SubscriptionItem) { n.Edges.SubscriptionItem = e }); err != nil { + return nil, err + } + } return nodes, nil } @@ -823,6 +952,102 @@ func (bilq *BillingInvoiceLineQuery) loadLineDiscounts(ctx context.Context, quer } return nil } +func (bilq *BillingInvoiceLineQuery) loadSubscription(ctx context.Context, query *SubscriptionQuery, nodes []*BillingInvoiceLine, init func(*BillingInvoiceLine), assign func(*BillingInvoiceLine, *Subscription)) error { + ids := make([]string, 0, len(nodes)) + nodeids := make(map[string][]*BillingInvoiceLine) + for i := range nodes { + if nodes[i].SubscriptionID == nil { + continue + } + fk := *nodes[i].SubscriptionID + if _, ok := nodeids[fk]; !ok { + ids = append(ids, fk) + } + nodeids[fk] = append(nodeids[fk], nodes[i]) + } + if len(ids) == 0 { + return nil + } + query.Where(subscription.IDIn(ids...)) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + nodes, ok := nodeids[n.ID] + if !ok { + return fmt.Errorf(`unexpected foreign-key "subscription_id" returned %v`, n.ID) + } + for i := range nodes { + assign(nodes[i], n) + } + } + return nil +} +func (bilq *BillingInvoiceLineQuery) loadSubscriptionPhase(ctx context.Context, query *SubscriptionPhaseQuery, nodes []*BillingInvoiceLine, init func(*BillingInvoiceLine), assign func(*BillingInvoiceLine, *SubscriptionPhase)) error { + ids := make([]string, 0, len(nodes)) + nodeids := make(map[string][]*BillingInvoiceLine) + for i := range nodes { + if nodes[i].SubscriptionPhaseID == nil { + continue + } + fk := *nodes[i].SubscriptionPhaseID + if _, ok := nodeids[fk]; !ok { + ids = append(ids, fk) + } + nodeids[fk] = append(nodeids[fk], nodes[i]) + } + if len(ids) == 0 { + return nil + } + query.Where(subscriptionphase.IDIn(ids...)) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + nodes, ok := nodeids[n.ID] + if !ok { + return fmt.Errorf(`unexpected foreign-key "subscription_phase_id" returned %v`, n.ID) + } + for i := range nodes { + assign(nodes[i], n) + } + } + return nil +} +func (bilq *BillingInvoiceLineQuery) loadSubscriptionItem(ctx context.Context, query *SubscriptionItemQuery, nodes []*BillingInvoiceLine, init func(*BillingInvoiceLine), assign func(*BillingInvoiceLine, *SubscriptionItem)) error { + ids := make([]string, 0, len(nodes)) + nodeids := make(map[string][]*BillingInvoiceLine) + for i := range nodes { + if nodes[i].SubscriptionItemID == nil { + continue + } + fk := *nodes[i].SubscriptionItemID + if _, ok := nodeids[fk]; !ok { + ids = append(ids, fk) + } + nodeids[fk] = append(nodeids[fk], nodes[i]) + } + if len(ids) == 0 { + return nil + } + query.Where(subscriptionitem.IDIn(ids...)) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + nodes, ok := nodeids[n.ID] + if !ok { + return fmt.Errorf(`unexpected foreign-key "subscription_item_id" returned %v`, n.ID) + } + for i := range nodes { + assign(nodes[i], n) + } + } + return nil +} func (bilq *BillingInvoiceLineQuery) sqlCount(ctx context.Context) (int, error) { _spec := bilq.querySpec() @@ -858,6 +1083,15 @@ func (bilq *BillingInvoiceLineQuery) querySpec() *sqlgraph.QuerySpec { if bilq.withParentLine != nil { _spec.Node.AddColumnOnce(billinginvoiceline.FieldParentLineID) } + if bilq.withSubscription != nil { + _spec.Node.AddColumnOnce(billinginvoiceline.FieldSubscriptionID) + } + if bilq.withSubscriptionPhase != nil { + _spec.Node.AddColumnOnce(billinginvoiceline.FieldSubscriptionPhaseID) + } + if bilq.withSubscriptionItem != nil { + _spec.Node.AddColumnOnce(billinginvoiceline.FieldSubscriptionItemID) + } } if ps := bilq.predicates; len(ps) > 0 { _spec.Predicate = func(selector *sql.Selector) { diff --git a/openmeter/ent/db/billinginvoiceline_update.go b/openmeter/ent/db/billinginvoiceline_update.go index 98661373a..92a8d5d8a 100644 --- a/openmeter/ent/db/billinginvoiceline_update.go +++ b/openmeter/ent/db/billinginvoiceline_update.go @@ -19,6 +19,9 @@ import ( "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoicelinediscount" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceusagebasedlineconfig" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" + "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" "github.com/openmeterio/openmeter/openmeter/productcatalog" ) @@ -375,6 +378,66 @@ func (bilu *BillingInvoiceLineUpdate) ClearChildUniqueReferenceID() *BillingInvo return bilu } +// SetSubscriptionID sets the "subscription_id" field. +func (bilu *BillingInvoiceLineUpdate) SetSubscriptionID(s string) *BillingInvoiceLineUpdate { + bilu.mutation.SetSubscriptionID(s) + return bilu +} + +// SetNillableSubscriptionID sets the "subscription_id" field if the given value is not nil. +func (bilu *BillingInvoiceLineUpdate) SetNillableSubscriptionID(s *string) *BillingInvoiceLineUpdate { + if s != nil { + bilu.SetSubscriptionID(*s) + } + return bilu +} + +// ClearSubscriptionID clears the value of the "subscription_id" field. +func (bilu *BillingInvoiceLineUpdate) ClearSubscriptionID() *BillingInvoiceLineUpdate { + bilu.mutation.ClearSubscriptionID() + return bilu +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (bilu *BillingInvoiceLineUpdate) SetSubscriptionPhaseID(s string) *BillingInvoiceLineUpdate { + bilu.mutation.SetSubscriptionPhaseID(s) + return bilu +} + +// SetNillableSubscriptionPhaseID sets the "subscription_phase_id" field if the given value is not nil. +func (bilu *BillingInvoiceLineUpdate) SetNillableSubscriptionPhaseID(s *string) *BillingInvoiceLineUpdate { + if s != nil { + bilu.SetSubscriptionPhaseID(*s) + } + return bilu +} + +// ClearSubscriptionPhaseID clears the value of the "subscription_phase_id" field. +func (bilu *BillingInvoiceLineUpdate) ClearSubscriptionPhaseID() *BillingInvoiceLineUpdate { + bilu.mutation.ClearSubscriptionPhaseID() + return bilu +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (bilu *BillingInvoiceLineUpdate) SetSubscriptionItemID(s string) *BillingInvoiceLineUpdate { + bilu.mutation.SetSubscriptionItemID(s) + return bilu +} + +// SetNillableSubscriptionItemID sets the "subscription_item_id" field if the given value is not nil. +func (bilu *BillingInvoiceLineUpdate) SetNillableSubscriptionItemID(s *string) *BillingInvoiceLineUpdate { + if s != nil { + bilu.SetSubscriptionItemID(*s) + } + return bilu +} + +// ClearSubscriptionItemID clears the value of the "subscription_item_id" field. +func (bilu *BillingInvoiceLineUpdate) ClearSubscriptionItemID() *BillingInvoiceLineUpdate { + bilu.mutation.ClearSubscriptionItemID() + return bilu +} + // SetBillingInvoiceID sets the "billing_invoice" edge to the BillingInvoice entity by ID. func (bilu *BillingInvoiceLineUpdate) SetBillingInvoiceID(id string) *BillingInvoiceLineUpdate { bilu.mutation.SetBillingInvoiceID(id) @@ -459,6 +522,21 @@ func (bilu *BillingInvoiceLineUpdate) AddLineDiscounts(b ...*BillingInvoiceLineD return bilu.AddLineDiscountIDs(ids...) } +// SetSubscription sets the "subscription" edge to the Subscription entity. +func (bilu *BillingInvoiceLineUpdate) SetSubscription(s *Subscription) *BillingInvoiceLineUpdate { + return bilu.SetSubscriptionID(s.ID) +} + +// SetSubscriptionPhase sets the "subscription_phase" edge to the SubscriptionPhase entity. +func (bilu *BillingInvoiceLineUpdate) SetSubscriptionPhase(s *SubscriptionPhase) *BillingInvoiceLineUpdate { + return bilu.SetSubscriptionPhaseID(s.ID) +} + +// SetSubscriptionItem sets the "subscription_item" edge to the SubscriptionItem entity. +func (bilu *BillingInvoiceLineUpdate) SetSubscriptionItem(s *SubscriptionItem) *BillingInvoiceLineUpdate { + return bilu.SetSubscriptionItemID(s.ID) +} + // Mutation returns the BillingInvoiceLineMutation object of the builder. func (bilu *BillingInvoiceLineUpdate) Mutation() *BillingInvoiceLineMutation { return bilu.mutation @@ -530,6 +608,24 @@ func (bilu *BillingInvoiceLineUpdate) RemoveLineDiscounts(b ...*BillingInvoiceLi return bilu.RemoveLineDiscountIDs(ids...) } +// ClearSubscription clears the "subscription" edge to the Subscription entity. +func (bilu *BillingInvoiceLineUpdate) ClearSubscription() *BillingInvoiceLineUpdate { + bilu.mutation.ClearSubscription() + return bilu +} + +// ClearSubscriptionPhase clears the "subscription_phase" edge to the SubscriptionPhase entity. +func (bilu *BillingInvoiceLineUpdate) ClearSubscriptionPhase() *BillingInvoiceLineUpdate { + bilu.mutation.ClearSubscriptionPhase() + return bilu +} + +// ClearSubscriptionItem clears the "subscription_item" edge to the SubscriptionItem entity. +func (bilu *BillingInvoiceLineUpdate) ClearSubscriptionItem() *BillingInvoiceLineUpdate { + bilu.mutation.ClearSubscriptionItem() + return bilu +} + // Save executes the query and returns the number of nodes affected by the update operation. func (bilu *BillingInvoiceLineUpdate) Save(ctx context.Context) (int, error) { bilu.defaults() @@ -883,6 +979,93 @@ func (bilu *BillingInvoiceLineUpdate) sqlSave(ctx context.Context) (n int, err e } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if bilu.mutation.SubscriptionCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionTable, + Columns: []string{billinginvoiceline.SubscriptionColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscription.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := bilu.mutation.SubscriptionIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionTable, + Columns: []string{billinginvoiceline.SubscriptionColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscription.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + if bilu.mutation.SubscriptionPhaseCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionPhaseTable, + Columns: []string{billinginvoiceline.SubscriptionPhaseColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionphase.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := bilu.mutation.SubscriptionPhaseIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionPhaseTable, + Columns: []string{billinginvoiceline.SubscriptionPhaseColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionphase.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + if bilu.mutation.SubscriptionItemCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionItemTable, + Columns: []string{billinginvoiceline.SubscriptionItemColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionitem.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := bilu.mutation.SubscriptionItemIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionItemTable, + Columns: []string{billinginvoiceline.SubscriptionItemColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionitem.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } if n, err = sqlgraph.UpdateNodes(ctx, bilu.driver, _spec); err != nil { if _, ok := err.(*sqlgraph.NotFoundError); ok { err = &NotFoundError{billinginvoiceline.Label} @@ -1243,6 +1426,66 @@ func (biluo *BillingInvoiceLineUpdateOne) ClearChildUniqueReferenceID() *Billing return biluo } +// SetSubscriptionID sets the "subscription_id" field. +func (biluo *BillingInvoiceLineUpdateOne) SetSubscriptionID(s string) *BillingInvoiceLineUpdateOne { + biluo.mutation.SetSubscriptionID(s) + return biluo +} + +// SetNillableSubscriptionID sets the "subscription_id" field if the given value is not nil. +func (biluo *BillingInvoiceLineUpdateOne) SetNillableSubscriptionID(s *string) *BillingInvoiceLineUpdateOne { + if s != nil { + biluo.SetSubscriptionID(*s) + } + return biluo +} + +// ClearSubscriptionID clears the value of the "subscription_id" field. +func (biluo *BillingInvoiceLineUpdateOne) ClearSubscriptionID() *BillingInvoiceLineUpdateOne { + biluo.mutation.ClearSubscriptionID() + return biluo +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (biluo *BillingInvoiceLineUpdateOne) SetSubscriptionPhaseID(s string) *BillingInvoiceLineUpdateOne { + biluo.mutation.SetSubscriptionPhaseID(s) + return biluo +} + +// SetNillableSubscriptionPhaseID sets the "subscription_phase_id" field if the given value is not nil. +func (biluo *BillingInvoiceLineUpdateOne) SetNillableSubscriptionPhaseID(s *string) *BillingInvoiceLineUpdateOne { + if s != nil { + biluo.SetSubscriptionPhaseID(*s) + } + return biluo +} + +// ClearSubscriptionPhaseID clears the value of the "subscription_phase_id" field. +func (biluo *BillingInvoiceLineUpdateOne) ClearSubscriptionPhaseID() *BillingInvoiceLineUpdateOne { + biluo.mutation.ClearSubscriptionPhaseID() + return biluo +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (biluo *BillingInvoiceLineUpdateOne) SetSubscriptionItemID(s string) *BillingInvoiceLineUpdateOne { + biluo.mutation.SetSubscriptionItemID(s) + return biluo +} + +// SetNillableSubscriptionItemID sets the "subscription_item_id" field if the given value is not nil. +func (biluo *BillingInvoiceLineUpdateOne) SetNillableSubscriptionItemID(s *string) *BillingInvoiceLineUpdateOne { + if s != nil { + biluo.SetSubscriptionItemID(*s) + } + return biluo +} + +// ClearSubscriptionItemID clears the value of the "subscription_item_id" field. +func (biluo *BillingInvoiceLineUpdateOne) ClearSubscriptionItemID() *BillingInvoiceLineUpdateOne { + biluo.mutation.ClearSubscriptionItemID() + return biluo +} + // SetBillingInvoiceID sets the "billing_invoice" edge to the BillingInvoice entity by ID. func (biluo *BillingInvoiceLineUpdateOne) SetBillingInvoiceID(id string) *BillingInvoiceLineUpdateOne { biluo.mutation.SetBillingInvoiceID(id) @@ -1327,6 +1570,21 @@ func (biluo *BillingInvoiceLineUpdateOne) AddLineDiscounts(b ...*BillingInvoiceL return biluo.AddLineDiscountIDs(ids...) } +// SetSubscription sets the "subscription" edge to the Subscription entity. +func (biluo *BillingInvoiceLineUpdateOne) SetSubscription(s *Subscription) *BillingInvoiceLineUpdateOne { + return biluo.SetSubscriptionID(s.ID) +} + +// SetSubscriptionPhase sets the "subscription_phase" edge to the SubscriptionPhase entity. +func (biluo *BillingInvoiceLineUpdateOne) SetSubscriptionPhase(s *SubscriptionPhase) *BillingInvoiceLineUpdateOne { + return biluo.SetSubscriptionPhaseID(s.ID) +} + +// SetSubscriptionItem sets the "subscription_item" edge to the SubscriptionItem entity. +func (biluo *BillingInvoiceLineUpdateOne) SetSubscriptionItem(s *SubscriptionItem) *BillingInvoiceLineUpdateOne { + return biluo.SetSubscriptionItemID(s.ID) +} + // Mutation returns the BillingInvoiceLineMutation object of the builder. func (biluo *BillingInvoiceLineUpdateOne) Mutation() *BillingInvoiceLineMutation { return biluo.mutation @@ -1398,6 +1656,24 @@ func (biluo *BillingInvoiceLineUpdateOne) RemoveLineDiscounts(b ...*BillingInvoi return biluo.RemoveLineDiscountIDs(ids...) } +// ClearSubscription clears the "subscription" edge to the Subscription entity. +func (biluo *BillingInvoiceLineUpdateOne) ClearSubscription() *BillingInvoiceLineUpdateOne { + biluo.mutation.ClearSubscription() + return biluo +} + +// ClearSubscriptionPhase clears the "subscription_phase" edge to the SubscriptionPhase entity. +func (biluo *BillingInvoiceLineUpdateOne) ClearSubscriptionPhase() *BillingInvoiceLineUpdateOne { + biluo.mutation.ClearSubscriptionPhase() + return biluo +} + +// ClearSubscriptionItem clears the "subscription_item" edge to the SubscriptionItem entity. +func (biluo *BillingInvoiceLineUpdateOne) ClearSubscriptionItem() *BillingInvoiceLineUpdateOne { + biluo.mutation.ClearSubscriptionItem() + return biluo +} + // Where appends a list predicates to the BillingInvoiceLineUpdate builder. func (biluo *BillingInvoiceLineUpdateOne) Where(ps ...predicate.BillingInvoiceLine) *BillingInvoiceLineUpdateOne { biluo.mutation.Where(ps...) @@ -1781,6 +2057,93 @@ func (biluo *BillingInvoiceLineUpdateOne) sqlSave(ctx context.Context) (_node *B } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if biluo.mutation.SubscriptionCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionTable, + Columns: []string{billinginvoiceline.SubscriptionColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscription.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := biluo.mutation.SubscriptionIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionTable, + Columns: []string{billinginvoiceline.SubscriptionColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscription.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + if biluo.mutation.SubscriptionPhaseCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionPhaseTable, + Columns: []string{billinginvoiceline.SubscriptionPhaseColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionphase.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := biluo.mutation.SubscriptionPhaseIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionPhaseTable, + Columns: []string{billinginvoiceline.SubscriptionPhaseColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionphase.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + if biluo.mutation.SubscriptionItemCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionItemTable, + Columns: []string{billinginvoiceline.SubscriptionItemColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionitem.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := biluo.mutation.SubscriptionItemIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: billinginvoiceline.SubscriptionItemTable, + Columns: []string{billinginvoiceline.SubscriptionItemColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(subscriptionitem.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } _node = &BillingInvoiceLine{config: biluo.config} _spec.Assign = _node.assignValues _spec.ScanValues = _node.scanValues diff --git a/openmeter/ent/db/client.go b/openmeter/ent/db/client.go index 5814fdf5e..444d723a1 100644 --- a/openmeter/ent/db/client.go +++ b/openmeter/ent/db/client.go @@ -2107,6 +2107,54 @@ func (c *BillingInvoiceLineClient) QueryLineDiscounts(bil *BillingInvoiceLine) * return query } +// QuerySubscription queries the subscription edge of a BillingInvoiceLine. +func (c *BillingInvoiceLineClient) QuerySubscription(bil *BillingInvoiceLine) *SubscriptionQuery { + query := (&SubscriptionClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := bil.ID + step := sqlgraph.NewStep( + sqlgraph.From(billinginvoiceline.Table, billinginvoiceline.FieldID, id), + sqlgraph.To(subscription.Table, subscription.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, billinginvoiceline.SubscriptionTable, billinginvoiceline.SubscriptionColumn), + ) + fromV = sqlgraph.Neighbors(bil.driver.Dialect(), step) + return fromV, nil + } + return query +} + +// QuerySubscriptionPhase queries the subscription_phase edge of a BillingInvoiceLine. +func (c *BillingInvoiceLineClient) QuerySubscriptionPhase(bil *BillingInvoiceLine) *SubscriptionPhaseQuery { + query := (&SubscriptionPhaseClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := bil.ID + step := sqlgraph.NewStep( + sqlgraph.From(billinginvoiceline.Table, billinginvoiceline.FieldID, id), + sqlgraph.To(subscriptionphase.Table, subscriptionphase.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, billinginvoiceline.SubscriptionPhaseTable, billinginvoiceline.SubscriptionPhaseColumn), + ) + fromV = sqlgraph.Neighbors(bil.driver.Dialect(), step) + return fromV, nil + } + return query +} + +// QuerySubscriptionItem queries the subscription_item edge of a BillingInvoiceLine. +func (c *BillingInvoiceLineClient) QuerySubscriptionItem(bil *BillingInvoiceLine) *SubscriptionItemQuery { + query := (&SubscriptionItemClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := bil.ID + step := sqlgraph.NewStep( + sqlgraph.From(billinginvoiceline.Table, billinginvoiceline.FieldID, id), + sqlgraph.To(subscriptionitem.Table, subscriptionitem.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, billinginvoiceline.SubscriptionItemTable, billinginvoiceline.SubscriptionItemColumn), + ) + fromV = sqlgraph.Neighbors(bil.driver.Dialect(), step) + return fromV, nil + } + return query +} + // Hooks returns the client hooks. func (c *BillingInvoiceLineClient) Hooks() []Hook { return c.hooks.BillingInvoiceLine @@ -5125,6 +5173,22 @@ func (c *SubscriptionClient) QueryPhases(s *Subscription) *SubscriptionPhaseQuer return query } +// QueryBillingLines queries the billing_lines edge of a Subscription. +func (c *SubscriptionClient) QueryBillingLines(s *Subscription) *BillingInvoiceLineQuery { + query := (&BillingInvoiceLineClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := s.ID + step := sqlgraph.NewStep( + sqlgraph.From(subscription.Table, subscription.FieldID, id), + sqlgraph.To(billinginvoiceline.Table, billinginvoiceline.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, subscription.BillingLinesTable, subscription.BillingLinesColumn), + ) + fromV = sqlgraph.Neighbors(s.driver.Dialect(), step) + return fromV, nil + } + return query +} + // Hooks returns the client hooks. func (c *SubscriptionClient) Hooks() []Hook { return c.hooks.Subscription @@ -5290,6 +5354,22 @@ func (c *SubscriptionItemClient) QueryEntitlement(si *SubscriptionItem) *Entitle return query } +// QueryBillingLines queries the billing_lines edge of a SubscriptionItem. +func (c *SubscriptionItemClient) QueryBillingLines(si *SubscriptionItem) *BillingInvoiceLineQuery { + query := (&BillingInvoiceLineClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := si.ID + step := sqlgraph.NewStep( + sqlgraph.From(subscriptionitem.Table, subscriptionitem.FieldID, id), + sqlgraph.To(billinginvoiceline.Table, billinginvoiceline.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, subscriptionitem.BillingLinesTable, subscriptionitem.BillingLinesColumn), + ) + fromV = sqlgraph.Neighbors(si.driver.Dialect(), step) + return fromV, nil + } + return query +} + // Hooks returns the client hooks. func (c *SubscriptionItemClient) Hooks() []Hook { return c.hooks.SubscriptionItem @@ -5455,6 +5535,22 @@ func (c *SubscriptionPhaseClient) QueryItems(sp *SubscriptionPhase) *Subscriptio return query } +// QueryBillingLines queries the billing_lines edge of a SubscriptionPhase. +func (c *SubscriptionPhaseClient) QueryBillingLines(sp *SubscriptionPhase) *BillingInvoiceLineQuery { + query := (&BillingInvoiceLineClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := sp.ID + step := sqlgraph.NewStep( + sqlgraph.From(subscriptionphase.Table, subscriptionphase.FieldID, id), + sqlgraph.To(billinginvoiceline.Table, billinginvoiceline.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, subscriptionphase.BillingLinesTable, subscriptionphase.BillingLinesColumn), + ) + fromV = sqlgraph.Neighbors(sp.driver.Dialect(), step) + return fromV, nil + } + return query +} + // Hooks returns the client hooks. func (c *SubscriptionPhaseClient) Hooks() []Hook { return c.hooks.SubscriptionPhase diff --git a/openmeter/ent/db/migrate/schema.go b/openmeter/ent/db/migrate/schema.go index c9014f93a..f328374da 100644 --- a/openmeter/ent/db/migrate/schema.go +++ b/openmeter/ent/db/migrate/schema.go @@ -472,6 +472,9 @@ var ( {Name: "fee_line_config_id", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "char(26)"}}, {Name: "usage_based_line_config_id", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "char(26)"}}, {Name: "parent_line_id", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "char(26)"}}, + {Name: "subscription_id", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "char(26)"}}, + {Name: "subscription_item_id", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "char(26)"}}, + {Name: "subscription_phase_id", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "char(26)"}}, } // BillingInvoiceLinesTable holds the schema information for the "billing_invoice_lines" table. BillingInvoiceLinesTable = &schema.Table{ @@ -503,6 +506,24 @@ var ( RefColumns: []*schema.Column{BillingInvoiceLinesColumns[0]}, OnDelete: schema.SetNull, }, + { + Symbol: "billing_invoice_lines_subscriptions_billing_lines", + Columns: []*schema.Column{BillingInvoiceLinesColumns[29]}, + RefColumns: []*schema.Column{SubscriptionsColumns[0]}, + OnDelete: schema.SetNull, + }, + { + Symbol: "billing_invoice_lines_subscription_items_billing_lines", + Columns: []*schema.Column{BillingInvoiceLinesColumns[30]}, + RefColumns: []*schema.Column{SubscriptionItemsColumns[0]}, + OnDelete: schema.SetNull, + }, + { + Symbol: "billing_invoice_lines_subscription_phases_billing_lines", + Columns: []*schema.Column{BillingInvoiceLinesColumns[31]}, + RefColumns: []*schema.Column{SubscriptionPhasesColumns[0]}, + OnDelete: schema.SetNull, + }, }, Indexes: []*schema.Index{ { @@ -538,6 +559,11 @@ var ( Where: "child_unique_reference_id IS NOT NULL AND deleted_at IS NULL", }, }, + { + Name: "billinginvoiceline_namespace_subscription_id_subscription_phase_id_subscription_item_id", + Unique: false, + Columns: []*schema.Column{BillingInvoiceLinesColumns[1], BillingInvoiceLinesColumns[29], BillingInvoiceLinesColumns[31], BillingInvoiceLinesColumns[30]}, + }, }, } // BillingInvoiceLineDiscountsColumns holds the columns for the "billing_invoice_line_discounts" table. @@ -1750,6 +1776,9 @@ func init() { BillingInvoiceLinesTable.ForeignKeys[1].RefTable = BillingInvoiceFlatFeeLineConfigsTable BillingInvoiceLinesTable.ForeignKeys[2].RefTable = BillingInvoiceUsageBasedLineConfigsTable BillingInvoiceLinesTable.ForeignKeys[3].RefTable = BillingInvoiceLinesTable + BillingInvoiceLinesTable.ForeignKeys[4].RefTable = SubscriptionsTable + BillingInvoiceLinesTable.ForeignKeys[5].RefTable = SubscriptionItemsTable + BillingInvoiceLinesTable.ForeignKeys[6].RefTable = SubscriptionPhasesTable BillingInvoiceLineDiscountsTable.ForeignKeys[0].RefTable = BillingInvoiceLinesTable BillingInvoiceValidationIssuesTable.ForeignKeys[0].RefTable = BillingInvoicesTable BillingProfilesTable.ForeignKeys[0].RefTable = AppsTable diff --git a/openmeter/ent/db/mutation.go b/openmeter/ent/db/mutation.go index 104668e3e..af962985c 100644 --- a/openmeter/ent/db/mutation.go +++ b/openmeter/ent/db/mutation.go @@ -10653,6 +10653,12 @@ type BillingInvoiceLineMutation struct { line_discounts map[string]struct{} removedline_discounts map[string]struct{} clearedline_discounts bool + subscription *string + clearedsubscription bool + subscription_phase *string + clearedsubscription_phase bool + subscription_item *string + clearedsubscription_item bool done bool oldValue func(context.Context) (*BillingInvoiceLine, error) predicates []predicate.BillingInvoiceLine @@ -11802,6 +11808,153 @@ func (m *BillingInvoiceLineMutation) ResetChildUniqueReferenceID() { delete(m.clearedFields, billinginvoiceline.FieldChildUniqueReferenceID) } +// SetSubscriptionID sets the "subscription_id" field. +func (m *BillingInvoiceLineMutation) SetSubscriptionID(s string) { + m.subscription = &s +} + +// SubscriptionID returns the value of the "subscription_id" field in the mutation. +func (m *BillingInvoiceLineMutation) SubscriptionID() (r string, exists bool) { + v := m.subscription + if v == nil { + return + } + return *v, true +} + +// OldSubscriptionID returns the old "subscription_id" field's value of the BillingInvoiceLine entity. +// If the BillingInvoiceLine object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *BillingInvoiceLineMutation) OldSubscriptionID(ctx context.Context) (v *string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldSubscriptionID is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldSubscriptionID requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldSubscriptionID: %w", err) + } + return oldValue.SubscriptionID, nil +} + +// ClearSubscriptionID clears the value of the "subscription_id" field. +func (m *BillingInvoiceLineMutation) ClearSubscriptionID() { + m.subscription = nil + m.clearedFields[billinginvoiceline.FieldSubscriptionID] = struct{}{} +} + +// SubscriptionIDCleared returns if the "subscription_id" field was cleared in this mutation. +func (m *BillingInvoiceLineMutation) SubscriptionIDCleared() bool { + _, ok := m.clearedFields[billinginvoiceline.FieldSubscriptionID] + return ok +} + +// ResetSubscriptionID resets all changes to the "subscription_id" field. +func (m *BillingInvoiceLineMutation) ResetSubscriptionID() { + m.subscription = nil + delete(m.clearedFields, billinginvoiceline.FieldSubscriptionID) +} + +// SetSubscriptionPhaseID sets the "subscription_phase_id" field. +func (m *BillingInvoiceLineMutation) SetSubscriptionPhaseID(s string) { + m.subscription_phase = &s +} + +// SubscriptionPhaseID returns the value of the "subscription_phase_id" field in the mutation. +func (m *BillingInvoiceLineMutation) SubscriptionPhaseID() (r string, exists bool) { + v := m.subscription_phase + if v == nil { + return + } + return *v, true +} + +// OldSubscriptionPhaseID returns the old "subscription_phase_id" field's value of the BillingInvoiceLine entity. +// If the BillingInvoiceLine object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *BillingInvoiceLineMutation) OldSubscriptionPhaseID(ctx context.Context) (v *string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldSubscriptionPhaseID is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldSubscriptionPhaseID requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldSubscriptionPhaseID: %w", err) + } + return oldValue.SubscriptionPhaseID, nil +} + +// ClearSubscriptionPhaseID clears the value of the "subscription_phase_id" field. +func (m *BillingInvoiceLineMutation) ClearSubscriptionPhaseID() { + m.subscription_phase = nil + m.clearedFields[billinginvoiceline.FieldSubscriptionPhaseID] = struct{}{} +} + +// SubscriptionPhaseIDCleared returns if the "subscription_phase_id" field was cleared in this mutation. +func (m *BillingInvoiceLineMutation) SubscriptionPhaseIDCleared() bool { + _, ok := m.clearedFields[billinginvoiceline.FieldSubscriptionPhaseID] + return ok +} + +// ResetSubscriptionPhaseID resets all changes to the "subscription_phase_id" field. +func (m *BillingInvoiceLineMutation) ResetSubscriptionPhaseID() { + m.subscription_phase = nil + delete(m.clearedFields, billinginvoiceline.FieldSubscriptionPhaseID) +} + +// SetSubscriptionItemID sets the "subscription_item_id" field. +func (m *BillingInvoiceLineMutation) SetSubscriptionItemID(s string) { + m.subscription_item = &s +} + +// SubscriptionItemID returns the value of the "subscription_item_id" field in the mutation. +func (m *BillingInvoiceLineMutation) SubscriptionItemID() (r string, exists bool) { + v := m.subscription_item + if v == nil { + return + } + return *v, true +} + +// OldSubscriptionItemID returns the old "subscription_item_id" field's value of the BillingInvoiceLine entity. +// If the BillingInvoiceLine object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *BillingInvoiceLineMutation) OldSubscriptionItemID(ctx context.Context) (v *string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldSubscriptionItemID is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldSubscriptionItemID requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldSubscriptionItemID: %w", err) + } + return oldValue.SubscriptionItemID, nil +} + +// ClearSubscriptionItemID clears the value of the "subscription_item_id" field. +func (m *BillingInvoiceLineMutation) ClearSubscriptionItemID() { + m.subscription_item = nil + m.clearedFields[billinginvoiceline.FieldSubscriptionItemID] = struct{}{} +} + +// SubscriptionItemIDCleared returns if the "subscription_item_id" field was cleared in this mutation. +func (m *BillingInvoiceLineMutation) SubscriptionItemIDCleared() bool { + _, ok := m.clearedFields[billinginvoiceline.FieldSubscriptionItemID] + return ok +} + +// ResetSubscriptionItemID resets all changes to the "subscription_item_id" field. +func (m *BillingInvoiceLineMutation) ResetSubscriptionItemID() { + m.subscription_item = nil + delete(m.clearedFields, billinginvoiceline.FieldSubscriptionItemID) +} + // SetBillingInvoiceID sets the "billing_invoice" edge to the BillingInvoice entity by id. func (m *BillingInvoiceLineMutation) SetBillingInvoiceID(id string) { m.billing_invoice = &id @@ -12055,6 +12208,87 @@ func (m *BillingInvoiceLineMutation) ResetLineDiscounts() { m.removedline_discounts = nil } +// ClearSubscription clears the "subscription" edge to the Subscription entity. +func (m *BillingInvoiceLineMutation) ClearSubscription() { + m.clearedsubscription = true + m.clearedFields[billinginvoiceline.FieldSubscriptionID] = struct{}{} +} + +// SubscriptionCleared reports if the "subscription" edge to the Subscription entity was cleared. +func (m *BillingInvoiceLineMutation) SubscriptionCleared() bool { + return m.SubscriptionIDCleared() || m.clearedsubscription +} + +// SubscriptionIDs returns the "subscription" edge IDs in the mutation. +// Note that IDs always returns len(IDs) <= 1 for unique edges, and you should use +// SubscriptionID instead. It exists only for internal usage by the builders. +func (m *BillingInvoiceLineMutation) SubscriptionIDs() (ids []string) { + if id := m.subscription; id != nil { + ids = append(ids, *id) + } + return +} + +// ResetSubscription resets all changes to the "subscription" edge. +func (m *BillingInvoiceLineMutation) ResetSubscription() { + m.subscription = nil + m.clearedsubscription = false +} + +// ClearSubscriptionPhase clears the "subscription_phase" edge to the SubscriptionPhase entity. +func (m *BillingInvoiceLineMutation) ClearSubscriptionPhase() { + m.clearedsubscription_phase = true + m.clearedFields[billinginvoiceline.FieldSubscriptionPhaseID] = struct{}{} +} + +// SubscriptionPhaseCleared reports if the "subscription_phase" edge to the SubscriptionPhase entity was cleared. +func (m *BillingInvoiceLineMutation) SubscriptionPhaseCleared() bool { + return m.SubscriptionPhaseIDCleared() || m.clearedsubscription_phase +} + +// SubscriptionPhaseIDs returns the "subscription_phase" edge IDs in the mutation. +// Note that IDs always returns len(IDs) <= 1 for unique edges, and you should use +// SubscriptionPhaseID instead. It exists only for internal usage by the builders. +func (m *BillingInvoiceLineMutation) SubscriptionPhaseIDs() (ids []string) { + if id := m.subscription_phase; id != nil { + ids = append(ids, *id) + } + return +} + +// ResetSubscriptionPhase resets all changes to the "subscription_phase" edge. +func (m *BillingInvoiceLineMutation) ResetSubscriptionPhase() { + m.subscription_phase = nil + m.clearedsubscription_phase = false +} + +// ClearSubscriptionItem clears the "subscription_item" edge to the SubscriptionItem entity. +func (m *BillingInvoiceLineMutation) ClearSubscriptionItem() { + m.clearedsubscription_item = true + m.clearedFields[billinginvoiceline.FieldSubscriptionItemID] = struct{}{} +} + +// SubscriptionItemCleared reports if the "subscription_item" edge to the SubscriptionItem entity was cleared. +func (m *BillingInvoiceLineMutation) SubscriptionItemCleared() bool { + return m.SubscriptionItemIDCleared() || m.clearedsubscription_item +} + +// SubscriptionItemIDs returns the "subscription_item" edge IDs in the mutation. +// Note that IDs always returns len(IDs) <= 1 for unique edges, and you should use +// SubscriptionItemID instead. It exists only for internal usage by the builders. +func (m *BillingInvoiceLineMutation) SubscriptionItemIDs() (ids []string) { + if id := m.subscription_item; id != nil { + ids = append(ids, *id) + } + return +} + +// ResetSubscriptionItem resets all changes to the "subscription_item" edge. +func (m *BillingInvoiceLineMutation) ResetSubscriptionItem() { + m.subscription_item = nil + m.clearedsubscription_item = false +} + // Where appends a list predicates to the BillingInvoiceLineMutation builder. func (m *BillingInvoiceLineMutation) Where(ps ...predicate.BillingInvoiceLine) { m.predicates = append(m.predicates, ps...) @@ -12089,7 +12323,7 @@ func (m *BillingInvoiceLineMutation) Type() string { // order to get all numeric fields that were incremented/decremented, call // AddedFields(). func (m *BillingInvoiceLineMutation) Fields() []string { - fields := make([]string, 0, 26) + fields := make([]string, 0, 29) if m.namespace != nil { fields = append(fields, billinginvoiceline.FieldNamespace) } @@ -12168,6 +12402,15 @@ func (m *BillingInvoiceLineMutation) Fields() []string { if m.child_unique_reference_id != nil { fields = append(fields, billinginvoiceline.FieldChildUniqueReferenceID) } + if m.subscription != nil { + fields = append(fields, billinginvoiceline.FieldSubscriptionID) + } + if m.subscription_phase != nil { + fields = append(fields, billinginvoiceline.FieldSubscriptionPhaseID) + } + if m.subscription_item != nil { + fields = append(fields, billinginvoiceline.FieldSubscriptionItemID) + } return fields } @@ -12228,6 +12471,12 @@ func (m *BillingInvoiceLineMutation) Field(name string) (ent.Value, bool) { return m.InvoicingAppExternalID() case billinginvoiceline.FieldChildUniqueReferenceID: return m.ChildUniqueReferenceID() + case billinginvoiceline.FieldSubscriptionID: + return m.SubscriptionID() + case billinginvoiceline.FieldSubscriptionPhaseID: + return m.SubscriptionPhaseID() + case billinginvoiceline.FieldSubscriptionItemID: + return m.SubscriptionItemID() } return nil, false } @@ -12289,6 +12538,12 @@ func (m *BillingInvoiceLineMutation) OldField(ctx context.Context, name string) return m.OldInvoicingAppExternalID(ctx) case billinginvoiceline.FieldChildUniqueReferenceID: return m.OldChildUniqueReferenceID(ctx) + case billinginvoiceline.FieldSubscriptionID: + return m.OldSubscriptionID(ctx) + case billinginvoiceline.FieldSubscriptionPhaseID: + return m.OldSubscriptionPhaseID(ctx) + case billinginvoiceline.FieldSubscriptionItemID: + return m.OldSubscriptionItemID(ctx) } return nil, fmt.Errorf("unknown BillingInvoiceLine field %s", name) } @@ -12480,6 +12735,27 @@ func (m *BillingInvoiceLineMutation) SetField(name string, value ent.Value) erro } m.SetChildUniqueReferenceID(v) return nil + case billinginvoiceline.FieldSubscriptionID: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetSubscriptionID(v) + return nil + case billinginvoiceline.FieldSubscriptionPhaseID: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetSubscriptionPhaseID(v) + return nil + case billinginvoiceline.FieldSubscriptionItemID: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetSubscriptionItemID(v) + return nil } return fmt.Errorf("unknown BillingInvoiceLine field %s", name) } @@ -12534,6 +12810,15 @@ func (m *BillingInvoiceLineMutation) ClearedFields() []string { if m.FieldCleared(billinginvoiceline.FieldChildUniqueReferenceID) { fields = append(fields, billinginvoiceline.FieldChildUniqueReferenceID) } + if m.FieldCleared(billinginvoiceline.FieldSubscriptionID) { + fields = append(fields, billinginvoiceline.FieldSubscriptionID) + } + if m.FieldCleared(billinginvoiceline.FieldSubscriptionPhaseID) { + fields = append(fields, billinginvoiceline.FieldSubscriptionPhaseID) + } + if m.FieldCleared(billinginvoiceline.FieldSubscriptionItemID) { + fields = append(fields, billinginvoiceline.FieldSubscriptionItemID) + } return fields } @@ -12572,6 +12857,15 @@ func (m *BillingInvoiceLineMutation) ClearField(name string) error { case billinginvoiceline.FieldChildUniqueReferenceID: m.ClearChildUniqueReferenceID() return nil + case billinginvoiceline.FieldSubscriptionID: + m.ClearSubscriptionID() + return nil + case billinginvoiceline.FieldSubscriptionPhaseID: + m.ClearSubscriptionPhaseID() + return nil + case billinginvoiceline.FieldSubscriptionItemID: + m.ClearSubscriptionItemID() + return nil } return fmt.Errorf("unknown BillingInvoiceLine nullable field %s", name) } @@ -12658,13 +12952,22 @@ func (m *BillingInvoiceLineMutation) ResetField(name string) error { case billinginvoiceline.FieldChildUniqueReferenceID: m.ResetChildUniqueReferenceID() return nil + case billinginvoiceline.FieldSubscriptionID: + m.ResetSubscriptionID() + return nil + case billinginvoiceline.FieldSubscriptionPhaseID: + m.ResetSubscriptionPhaseID() + return nil + case billinginvoiceline.FieldSubscriptionItemID: + m.ResetSubscriptionItemID() + return nil } return fmt.Errorf("unknown BillingInvoiceLine field %s", name) } // AddedEdges returns all edge names that were set/added in this mutation. func (m *BillingInvoiceLineMutation) AddedEdges() []string { - edges := make([]string, 0, 6) + edges := make([]string, 0, 9) if m.billing_invoice != nil { edges = append(edges, billinginvoiceline.EdgeBillingInvoice) } @@ -12683,6 +12986,15 @@ func (m *BillingInvoiceLineMutation) AddedEdges() []string { if m.line_discounts != nil { edges = append(edges, billinginvoiceline.EdgeLineDiscounts) } + if m.subscription != nil { + edges = append(edges, billinginvoiceline.EdgeSubscription) + } + if m.subscription_phase != nil { + edges = append(edges, billinginvoiceline.EdgeSubscriptionPhase) + } + if m.subscription_item != nil { + edges = append(edges, billinginvoiceline.EdgeSubscriptionItem) + } return edges } @@ -12718,13 +13030,25 @@ func (m *BillingInvoiceLineMutation) AddedIDs(name string) []ent.Value { ids = append(ids, id) } return ids + case billinginvoiceline.EdgeSubscription: + if id := m.subscription; id != nil { + return []ent.Value{*id} + } + case billinginvoiceline.EdgeSubscriptionPhase: + if id := m.subscription_phase; id != nil { + return []ent.Value{*id} + } + case billinginvoiceline.EdgeSubscriptionItem: + if id := m.subscription_item; id != nil { + return []ent.Value{*id} + } } return nil } // RemovedEdges returns all edge names that were removed in this mutation. func (m *BillingInvoiceLineMutation) RemovedEdges() []string { - edges := make([]string, 0, 6) + edges := make([]string, 0, 9) if m.removeddetailed_lines != nil { edges = append(edges, billinginvoiceline.EdgeDetailedLines) } @@ -12756,7 +13080,7 @@ func (m *BillingInvoiceLineMutation) RemovedIDs(name string) []ent.Value { // ClearedEdges returns all edge names that were cleared in this mutation. func (m *BillingInvoiceLineMutation) ClearedEdges() []string { - edges := make([]string, 0, 6) + edges := make([]string, 0, 9) if m.clearedbilling_invoice { edges = append(edges, billinginvoiceline.EdgeBillingInvoice) } @@ -12775,6 +13099,15 @@ func (m *BillingInvoiceLineMutation) ClearedEdges() []string { if m.clearedline_discounts { edges = append(edges, billinginvoiceline.EdgeLineDiscounts) } + if m.clearedsubscription { + edges = append(edges, billinginvoiceline.EdgeSubscription) + } + if m.clearedsubscription_phase { + edges = append(edges, billinginvoiceline.EdgeSubscriptionPhase) + } + if m.clearedsubscription_item { + edges = append(edges, billinginvoiceline.EdgeSubscriptionItem) + } return edges } @@ -12794,6 +13127,12 @@ func (m *BillingInvoiceLineMutation) EdgeCleared(name string) bool { return m.cleareddetailed_lines case billinginvoiceline.EdgeLineDiscounts: return m.clearedline_discounts + case billinginvoiceline.EdgeSubscription: + return m.clearedsubscription + case billinginvoiceline.EdgeSubscriptionPhase: + return m.clearedsubscription_phase + case billinginvoiceline.EdgeSubscriptionItem: + return m.clearedsubscription_item } return false } @@ -12814,6 +13153,15 @@ func (m *BillingInvoiceLineMutation) ClearEdge(name string) error { case billinginvoiceline.EdgeParentLine: m.ClearParentLine() return nil + case billinginvoiceline.EdgeSubscription: + m.ClearSubscription() + return nil + case billinginvoiceline.EdgeSubscriptionPhase: + m.ClearSubscriptionPhase() + return nil + case billinginvoiceline.EdgeSubscriptionItem: + m.ClearSubscriptionItem() + return nil } return fmt.Errorf("unknown BillingInvoiceLine unique edge %s", name) } @@ -12840,6 +13188,15 @@ func (m *BillingInvoiceLineMutation) ResetEdge(name string) error { case billinginvoiceline.EdgeLineDiscounts: m.ResetLineDiscounts() return nil + case billinginvoiceline.EdgeSubscription: + m.ResetSubscription() + return nil + case billinginvoiceline.EdgeSubscriptionPhase: + m.ResetSubscriptionPhase() + return nil + case billinginvoiceline.EdgeSubscriptionItem: + m.ResetSubscriptionItem() + return nil } return fmt.Errorf("unknown BillingInvoiceLine edge %s", name) } @@ -32559,30 +32916,33 @@ func (m *PlanRateCardMutation) ResetEdge(name string) error { // SubscriptionMutation represents an operation that mutates the Subscription nodes in the graph. type SubscriptionMutation struct { config - op Op - typ string - id *string - namespace *string - created_at *time.Time - updated_at *time.Time - deleted_at *time.Time - metadata *map[string]string - active_from *time.Time - active_to *time.Time - name *string - description *string - currency *currencyx.Code - clearedFields map[string]struct{} - plan *string - clearedplan bool - customer *string - clearedcustomer bool - phases map[string]struct{} - removedphases map[string]struct{} - clearedphases bool - done bool - oldValue func(context.Context) (*Subscription, error) - predicates []predicate.Subscription + op Op + typ string + id *string + namespace *string + created_at *time.Time + updated_at *time.Time + deleted_at *time.Time + metadata *map[string]string + active_from *time.Time + active_to *time.Time + name *string + description *string + currency *currencyx.Code + clearedFields map[string]struct{} + plan *string + clearedplan bool + customer *string + clearedcustomer bool + phases map[string]struct{} + removedphases map[string]struct{} + clearedphases bool + billing_lines map[string]struct{} + removedbilling_lines map[string]struct{} + clearedbilling_lines bool + done bool + oldValue func(context.Context) (*Subscription, error) + predicates []predicate.Subscription } var _ ent.Mutation = (*SubscriptionMutation)(nil) @@ -33294,6 +33654,60 @@ func (m *SubscriptionMutation) ResetPhases() { m.removedphases = nil } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by ids. +func (m *SubscriptionMutation) AddBillingLineIDs(ids ...string) { + if m.billing_lines == nil { + m.billing_lines = make(map[string]struct{}) + } + for i := range ids { + m.billing_lines[ids[i]] = struct{}{} + } +} + +// ClearBillingLines clears the "billing_lines" edge to the BillingInvoiceLine entity. +func (m *SubscriptionMutation) ClearBillingLines() { + m.clearedbilling_lines = true +} + +// BillingLinesCleared reports if the "billing_lines" edge to the BillingInvoiceLine entity was cleared. +func (m *SubscriptionMutation) BillingLinesCleared() bool { + return m.clearedbilling_lines +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (m *SubscriptionMutation) RemoveBillingLineIDs(ids ...string) { + if m.removedbilling_lines == nil { + m.removedbilling_lines = make(map[string]struct{}) + } + for i := range ids { + delete(m.billing_lines, ids[i]) + m.removedbilling_lines[ids[i]] = struct{}{} + } +} + +// RemovedBillingLines returns the removed IDs of the "billing_lines" edge to the BillingInvoiceLine entity. +func (m *SubscriptionMutation) RemovedBillingLinesIDs() (ids []string) { + for id := range m.removedbilling_lines { + ids = append(ids, id) + } + return +} + +// BillingLinesIDs returns the "billing_lines" edge IDs in the mutation. +func (m *SubscriptionMutation) BillingLinesIDs() (ids []string) { + for id := range m.billing_lines { + ids = append(ids, id) + } + return +} + +// ResetBillingLines resets all changes to the "billing_lines" edge. +func (m *SubscriptionMutation) ResetBillingLines() { + m.billing_lines = nil + m.clearedbilling_lines = false + m.removedbilling_lines = nil +} + // Where appends a list predicates to the SubscriptionMutation builder. func (m *SubscriptionMutation) Where(ps ...predicate.Subscription) { m.predicates = append(m.predicates, ps...) @@ -33647,7 +34061,7 @@ func (m *SubscriptionMutation) ResetField(name string) error { // AddedEdges returns all edge names that were set/added in this mutation. func (m *SubscriptionMutation) AddedEdges() []string { - edges := make([]string, 0, 3) + edges := make([]string, 0, 4) if m.plan != nil { edges = append(edges, subscription.EdgePlan) } @@ -33657,6 +34071,9 @@ func (m *SubscriptionMutation) AddedEdges() []string { if m.phases != nil { edges = append(edges, subscription.EdgePhases) } + if m.billing_lines != nil { + edges = append(edges, subscription.EdgeBillingLines) + } return edges } @@ -33678,16 +34095,25 @@ func (m *SubscriptionMutation) AddedIDs(name string) []ent.Value { ids = append(ids, id) } return ids + case subscription.EdgeBillingLines: + ids := make([]ent.Value, 0, len(m.billing_lines)) + for id := range m.billing_lines { + ids = append(ids, id) + } + return ids } return nil } // RemovedEdges returns all edge names that were removed in this mutation. func (m *SubscriptionMutation) RemovedEdges() []string { - edges := make([]string, 0, 3) + edges := make([]string, 0, 4) if m.removedphases != nil { edges = append(edges, subscription.EdgePhases) } + if m.removedbilling_lines != nil { + edges = append(edges, subscription.EdgeBillingLines) + } return edges } @@ -33701,13 +34127,19 @@ func (m *SubscriptionMutation) RemovedIDs(name string) []ent.Value { ids = append(ids, id) } return ids + case subscription.EdgeBillingLines: + ids := make([]ent.Value, 0, len(m.removedbilling_lines)) + for id := range m.removedbilling_lines { + ids = append(ids, id) + } + return ids } return nil } // ClearedEdges returns all edge names that were cleared in this mutation. func (m *SubscriptionMutation) ClearedEdges() []string { - edges := make([]string, 0, 3) + edges := make([]string, 0, 4) if m.clearedplan { edges = append(edges, subscription.EdgePlan) } @@ -33717,6 +34149,9 @@ func (m *SubscriptionMutation) ClearedEdges() []string { if m.clearedphases { edges = append(edges, subscription.EdgePhases) } + if m.clearedbilling_lines { + edges = append(edges, subscription.EdgeBillingLines) + } return edges } @@ -33730,6 +34165,8 @@ func (m *SubscriptionMutation) EdgeCleared(name string) bool { return m.clearedcustomer case subscription.EdgePhases: return m.clearedphases + case subscription.EdgeBillingLines: + return m.clearedbilling_lines } return false } @@ -33761,6 +34198,9 @@ func (m *SubscriptionMutation) ResetEdge(name string) error { case subscription.EdgePhases: m.ResetPhases() return nil + case subscription.EdgeBillingLines: + m.ResetBillingLines() + return nil } return fmt.Errorf("unknown Subscription edge %s", name) } @@ -33793,6 +34233,9 @@ type SubscriptionItemMutation struct { clearedphase bool entitlement *string clearedentitlement bool + billing_lines map[string]struct{} + removedbilling_lines map[string]struct{} + clearedbilling_lines bool done bool oldValue func(context.Context) (*SubscriptionItem, error) predicates []predicate.SubscriptionItem @@ -34796,6 +35239,60 @@ func (m *SubscriptionItemMutation) ResetEntitlement() { m.clearedentitlement = false } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by ids. +func (m *SubscriptionItemMutation) AddBillingLineIDs(ids ...string) { + if m.billing_lines == nil { + m.billing_lines = make(map[string]struct{}) + } + for i := range ids { + m.billing_lines[ids[i]] = struct{}{} + } +} + +// ClearBillingLines clears the "billing_lines" edge to the BillingInvoiceLine entity. +func (m *SubscriptionItemMutation) ClearBillingLines() { + m.clearedbilling_lines = true +} + +// BillingLinesCleared reports if the "billing_lines" edge to the BillingInvoiceLine entity was cleared. +func (m *SubscriptionItemMutation) BillingLinesCleared() bool { + return m.clearedbilling_lines +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (m *SubscriptionItemMutation) RemoveBillingLineIDs(ids ...string) { + if m.removedbilling_lines == nil { + m.removedbilling_lines = make(map[string]struct{}) + } + for i := range ids { + delete(m.billing_lines, ids[i]) + m.removedbilling_lines[ids[i]] = struct{}{} + } +} + +// RemovedBillingLines returns the removed IDs of the "billing_lines" edge to the BillingInvoiceLine entity. +func (m *SubscriptionItemMutation) RemovedBillingLinesIDs() (ids []string) { + for id := range m.removedbilling_lines { + ids = append(ids, id) + } + return +} + +// BillingLinesIDs returns the "billing_lines" edge IDs in the mutation. +func (m *SubscriptionItemMutation) BillingLinesIDs() (ids []string) { + for id := range m.billing_lines { + ids = append(ids, id) + } + return +} + +// ResetBillingLines resets all changes to the "billing_lines" edge. +func (m *SubscriptionItemMutation) ResetBillingLines() { + m.billing_lines = nil + m.clearedbilling_lines = false + m.removedbilling_lines = nil +} + // Where appends a list predicates to the SubscriptionItemMutation builder. func (m *SubscriptionItemMutation) Where(ps ...predicate.SubscriptionItem) { m.predicates = append(m.predicates, ps...) @@ -35310,13 +35807,16 @@ func (m *SubscriptionItemMutation) ResetField(name string) error { // AddedEdges returns all edge names that were set/added in this mutation. func (m *SubscriptionItemMutation) AddedEdges() []string { - edges := make([]string, 0, 2) + edges := make([]string, 0, 3) if m.phase != nil { edges = append(edges, subscriptionitem.EdgePhase) } if m.entitlement != nil { edges = append(edges, subscriptionitem.EdgeEntitlement) } + if m.billing_lines != nil { + edges = append(edges, subscriptionitem.EdgeBillingLines) + } return edges } @@ -35332,31 +35832,51 @@ func (m *SubscriptionItemMutation) AddedIDs(name string) []ent.Value { if id := m.entitlement; id != nil { return []ent.Value{*id} } + case subscriptionitem.EdgeBillingLines: + ids := make([]ent.Value, 0, len(m.billing_lines)) + for id := range m.billing_lines { + ids = append(ids, id) + } + return ids } return nil } // RemovedEdges returns all edge names that were removed in this mutation. func (m *SubscriptionItemMutation) RemovedEdges() []string { - edges := make([]string, 0, 2) + edges := make([]string, 0, 3) + if m.removedbilling_lines != nil { + edges = append(edges, subscriptionitem.EdgeBillingLines) + } return edges } // RemovedIDs returns all IDs (to other nodes) that were removed for the edge with // the given name in this mutation. func (m *SubscriptionItemMutation) RemovedIDs(name string) []ent.Value { + switch name { + case subscriptionitem.EdgeBillingLines: + ids := make([]ent.Value, 0, len(m.removedbilling_lines)) + for id := range m.removedbilling_lines { + ids = append(ids, id) + } + return ids + } return nil } // ClearedEdges returns all edge names that were cleared in this mutation. func (m *SubscriptionItemMutation) ClearedEdges() []string { - edges := make([]string, 0, 2) + edges := make([]string, 0, 3) if m.clearedphase { edges = append(edges, subscriptionitem.EdgePhase) } if m.clearedentitlement { edges = append(edges, subscriptionitem.EdgeEntitlement) } + if m.clearedbilling_lines { + edges = append(edges, subscriptionitem.EdgeBillingLines) + } return edges } @@ -35368,6 +35888,8 @@ func (m *SubscriptionItemMutation) EdgeCleared(name string) bool { return m.clearedphase case subscriptionitem.EdgeEntitlement: return m.clearedentitlement + case subscriptionitem.EdgeBillingLines: + return m.clearedbilling_lines } return false } @@ -35396,6 +35918,9 @@ func (m *SubscriptionItemMutation) ResetEdge(name string) error { case subscriptionitem.EdgeEntitlement: m.ResetEntitlement() return nil + case subscriptionitem.EdgeBillingLines: + m.ResetBillingLines() + return nil } return fmt.Errorf("unknown SubscriptionItem edge %s", name) } @@ -35403,27 +35928,30 @@ func (m *SubscriptionItemMutation) ResetEdge(name string) error { // SubscriptionPhaseMutation represents an operation that mutates the SubscriptionPhase nodes in the graph. type SubscriptionPhaseMutation struct { config - op Op - typ string - id *string - namespace *string - created_at *time.Time - updated_at *time.Time - deleted_at *time.Time - metadata *map[string]string - key *string - name *string - description *string - active_from *time.Time - clearedFields map[string]struct{} - subscription *string - clearedsubscription bool - items map[string]struct{} - removeditems map[string]struct{} - cleareditems bool - done bool - oldValue func(context.Context) (*SubscriptionPhase, error) - predicates []predicate.SubscriptionPhase + op Op + typ string + id *string + namespace *string + created_at *time.Time + updated_at *time.Time + deleted_at *time.Time + metadata *map[string]string + key *string + name *string + description *string + active_from *time.Time + clearedFields map[string]struct{} + subscription *string + clearedsubscription bool + items map[string]struct{} + removeditems map[string]struct{} + cleareditems bool + billing_lines map[string]struct{} + removedbilling_lines map[string]struct{} + clearedbilling_lines bool + done bool + oldValue func(context.Context) (*SubscriptionPhase, error) + predicates []predicate.SubscriptionPhase } var _ ent.Mutation = (*SubscriptionPhaseMutation)(nil) @@ -36010,6 +36538,60 @@ func (m *SubscriptionPhaseMutation) ResetItems() { m.removeditems = nil } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by ids. +func (m *SubscriptionPhaseMutation) AddBillingLineIDs(ids ...string) { + if m.billing_lines == nil { + m.billing_lines = make(map[string]struct{}) + } + for i := range ids { + m.billing_lines[ids[i]] = struct{}{} + } +} + +// ClearBillingLines clears the "billing_lines" edge to the BillingInvoiceLine entity. +func (m *SubscriptionPhaseMutation) ClearBillingLines() { + m.clearedbilling_lines = true +} + +// BillingLinesCleared reports if the "billing_lines" edge to the BillingInvoiceLine entity was cleared. +func (m *SubscriptionPhaseMutation) BillingLinesCleared() bool { + return m.clearedbilling_lines +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (m *SubscriptionPhaseMutation) RemoveBillingLineIDs(ids ...string) { + if m.removedbilling_lines == nil { + m.removedbilling_lines = make(map[string]struct{}) + } + for i := range ids { + delete(m.billing_lines, ids[i]) + m.removedbilling_lines[ids[i]] = struct{}{} + } +} + +// RemovedBillingLines returns the removed IDs of the "billing_lines" edge to the BillingInvoiceLine entity. +func (m *SubscriptionPhaseMutation) RemovedBillingLinesIDs() (ids []string) { + for id := range m.removedbilling_lines { + ids = append(ids, id) + } + return +} + +// BillingLinesIDs returns the "billing_lines" edge IDs in the mutation. +func (m *SubscriptionPhaseMutation) BillingLinesIDs() (ids []string) { + for id := range m.billing_lines { + ids = append(ids, id) + } + return +} + +// ResetBillingLines resets all changes to the "billing_lines" edge. +func (m *SubscriptionPhaseMutation) ResetBillingLines() { + m.billing_lines = nil + m.clearedbilling_lines = false + m.removedbilling_lines = nil +} + // Where appends a list predicates to the SubscriptionPhaseMutation builder. func (m *SubscriptionPhaseMutation) Where(ps ...predicate.SubscriptionPhase) { m.predicates = append(m.predicates, ps...) @@ -36317,13 +36899,16 @@ func (m *SubscriptionPhaseMutation) ResetField(name string) error { // AddedEdges returns all edge names that were set/added in this mutation. func (m *SubscriptionPhaseMutation) AddedEdges() []string { - edges := make([]string, 0, 2) + edges := make([]string, 0, 3) if m.subscription != nil { edges = append(edges, subscriptionphase.EdgeSubscription) } if m.items != nil { edges = append(edges, subscriptionphase.EdgeItems) } + if m.billing_lines != nil { + edges = append(edges, subscriptionphase.EdgeBillingLines) + } return edges } @@ -36341,16 +36926,25 @@ func (m *SubscriptionPhaseMutation) AddedIDs(name string) []ent.Value { ids = append(ids, id) } return ids + case subscriptionphase.EdgeBillingLines: + ids := make([]ent.Value, 0, len(m.billing_lines)) + for id := range m.billing_lines { + ids = append(ids, id) + } + return ids } return nil } // RemovedEdges returns all edge names that were removed in this mutation. func (m *SubscriptionPhaseMutation) RemovedEdges() []string { - edges := make([]string, 0, 2) + edges := make([]string, 0, 3) if m.removeditems != nil { edges = append(edges, subscriptionphase.EdgeItems) } + if m.removedbilling_lines != nil { + edges = append(edges, subscriptionphase.EdgeBillingLines) + } return edges } @@ -36364,19 +36958,28 @@ func (m *SubscriptionPhaseMutation) RemovedIDs(name string) []ent.Value { ids = append(ids, id) } return ids + case subscriptionphase.EdgeBillingLines: + ids := make([]ent.Value, 0, len(m.removedbilling_lines)) + for id := range m.removedbilling_lines { + ids = append(ids, id) + } + return ids } return nil } // ClearedEdges returns all edge names that were cleared in this mutation. func (m *SubscriptionPhaseMutation) ClearedEdges() []string { - edges := make([]string, 0, 2) + edges := make([]string, 0, 3) if m.clearedsubscription { edges = append(edges, subscriptionphase.EdgeSubscription) } if m.cleareditems { edges = append(edges, subscriptionphase.EdgeItems) } + if m.clearedbilling_lines { + edges = append(edges, subscriptionphase.EdgeBillingLines) + } return edges } @@ -36388,6 +36991,8 @@ func (m *SubscriptionPhaseMutation) EdgeCleared(name string) bool { return m.clearedsubscription case subscriptionphase.EdgeItems: return m.cleareditems + case subscriptionphase.EdgeBillingLines: + return m.clearedbilling_lines } return false } @@ -36413,6 +37018,9 @@ func (m *SubscriptionPhaseMutation) ResetEdge(name string) error { case subscriptionphase.EdgeItems: m.ResetItems() return nil + case subscriptionphase.EdgeBillingLines: + m.ResetBillingLines() + return nil } return fmt.Errorf("unknown SubscriptionPhase edge %s", name) } diff --git a/openmeter/ent/db/setorclear.go b/openmeter/ent/db/setorclear.go index 47623d3cb..a1f7c93b4 100644 --- a/openmeter/ent/db/setorclear.go +++ b/openmeter/ent/db/setorclear.go @@ -742,6 +742,48 @@ func (u *BillingInvoiceLineUpdateOne) SetOrClearChildUniqueReferenceID(value *st return u.SetChildUniqueReferenceID(*value) } +func (u *BillingInvoiceLineUpdate) SetOrClearSubscriptionID(value *string) *BillingInvoiceLineUpdate { + if value == nil { + return u.ClearSubscriptionID() + } + return u.SetSubscriptionID(*value) +} + +func (u *BillingInvoiceLineUpdateOne) SetOrClearSubscriptionID(value *string) *BillingInvoiceLineUpdateOne { + if value == nil { + return u.ClearSubscriptionID() + } + return u.SetSubscriptionID(*value) +} + +func (u *BillingInvoiceLineUpdate) SetOrClearSubscriptionPhaseID(value *string) *BillingInvoiceLineUpdate { + if value == nil { + return u.ClearSubscriptionPhaseID() + } + return u.SetSubscriptionPhaseID(*value) +} + +func (u *BillingInvoiceLineUpdateOne) SetOrClearSubscriptionPhaseID(value *string) *BillingInvoiceLineUpdateOne { + if value == nil { + return u.ClearSubscriptionPhaseID() + } + return u.SetSubscriptionPhaseID(*value) +} + +func (u *BillingInvoiceLineUpdate) SetOrClearSubscriptionItemID(value *string) *BillingInvoiceLineUpdate { + if value == nil { + return u.ClearSubscriptionItemID() + } + return u.SetSubscriptionItemID(*value) +} + +func (u *BillingInvoiceLineUpdateOne) SetOrClearSubscriptionItemID(value *string) *BillingInvoiceLineUpdateOne { + if value == nil { + return u.ClearSubscriptionItemID() + } + return u.SetSubscriptionItemID(*value) +} + func (u *BillingInvoiceLineDiscountUpdate) SetOrClearDeletedAt(value *time.Time) *BillingInvoiceLineDiscountUpdate { if value == nil { return u.ClearDeletedAt() diff --git a/openmeter/ent/db/subscription.go b/openmeter/ent/db/subscription.go index 2bb778a4e..15793e3ac 100644 --- a/openmeter/ent/db/subscription.go +++ b/openmeter/ent/db/subscription.go @@ -59,9 +59,11 @@ type SubscriptionEdges struct { Customer *Customer `json:"customer,omitempty"` // Phases holds the value of the phases edge. Phases []*SubscriptionPhase `json:"phases,omitempty"` + // BillingLines holds the value of the billing_lines edge. + BillingLines []*BillingInvoiceLine `json:"billing_lines,omitempty"` // loadedTypes holds the information for reporting if a // type was loaded (or requested) in eager-loading or not. - loadedTypes [3]bool + loadedTypes [4]bool } // PlanOrErr returns the Plan value or an error if the edge @@ -95,6 +97,15 @@ func (e SubscriptionEdges) PhasesOrErr() ([]*SubscriptionPhase, error) { return nil, &NotLoadedError{edge: "phases"} } +// BillingLinesOrErr returns the BillingLines value or an error if the edge +// was not loaded in eager-loading. +func (e SubscriptionEdges) BillingLinesOrErr() ([]*BillingInvoiceLine, error) { + if e.loadedTypes[3] { + return e.BillingLines, nil + } + return nil, &NotLoadedError{edge: "billing_lines"} +} + // scanValues returns the types for scanning values from sql.Rows. func (*Subscription) scanValues(columns []string) ([]any, error) { values := make([]any, len(columns)) @@ -233,6 +244,11 @@ func (s *Subscription) QueryPhases() *SubscriptionPhaseQuery { return NewSubscriptionClient(s.config).QueryPhases(s) } +// QueryBillingLines queries the "billing_lines" edge of the Subscription entity. +func (s *Subscription) QueryBillingLines() *BillingInvoiceLineQuery { + return NewSubscriptionClient(s.config).QueryBillingLines(s) +} + // Update returns a builder for updating this Subscription. // Note that you need to call Subscription.Unwrap() before calling this method if this Subscription // was returned from a transaction, and the transaction was committed or rolled back. diff --git a/openmeter/ent/db/subscription/subscription.go b/openmeter/ent/db/subscription/subscription.go index 22570dbd7..980ec7a43 100644 --- a/openmeter/ent/db/subscription/subscription.go +++ b/openmeter/ent/db/subscription/subscription.go @@ -44,6 +44,8 @@ const ( EdgeCustomer = "customer" // EdgePhases holds the string denoting the phases edge name in mutations. EdgePhases = "phases" + // EdgeBillingLines holds the string denoting the billing_lines edge name in mutations. + EdgeBillingLines = "billing_lines" // Table holds the table name of the subscription in the database. Table = "subscriptions" // PlanTable is the table that holds the plan relation/edge. @@ -67,6 +69,13 @@ const ( PhasesInverseTable = "subscription_phases" // PhasesColumn is the table column denoting the phases relation/edge. PhasesColumn = "subscription_id" + // BillingLinesTable is the table that holds the billing_lines relation/edge. + BillingLinesTable = "billing_invoice_lines" + // BillingLinesInverseTable is the table name for the BillingInvoiceLine entity. + // It exists in this package in order to avoid circular dependency with the "billinginvoiceline" package. + BillingLinesInverseTable = "billing_invoice_lines" + // BillingLinesColumn is the table column denoting the billing_lines relation/edge. + BillingLinesColumn = "subscription_id" ) // Columns holds all SQL columns for subscription fields. @@ -207,6 +216,20 @@ func ByPhases(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { sqlgraph.OrderByNeighborTerms(s, newPhasesStep(), append([]sql.OrderTerm{term}, terms...)...) } } + +// ByBillingLinesCount orders the results by billing_lines count. +func ByBillingLinesCount(opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborsCount(s, newBillingLinesStep(), opts...) + } +} + +// ByBillingLines orders the results by billing_lines terms. +func ByBillingLines(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newBillingLinesStep(), append([]sql.OrderTerm{term}, terms...)...) + } +} func newPlanStep() *sqlgraph.Step { return sqlgraph.NewStep( sqlgraph.From(Table, FieldID), @@ -228,3 +251,10 @@ func newPhasesStep() *sqlgraph.Step { sqlgraph.Edge(sqlgraph.O2M, false, PhasesTable, PhasesColumn), ) } +func newBillingLinesStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(BillingLinesInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, BillingLinesTable, BillingLinesColumn), + ) +} diff --git a/openmeter/ent/db/subscription/where.go b/openmeter/ent/db/subscription/where.go index 9abfa1d40..673a2cdc3 100644 --- a/openmeter/ent/db/subscription/where.go +++ b/openmeter/ent/db/subscription/where.go @@ -850,6 +850,29 @@ func HasPhasesWith(preds ...predicate.SubscriptionPhase) predicate.Subscription }) } +// HasBillingLines applies the HasEdge predicate on the "billing_lines" edge. +func HasBillingLines() predicate.Subscription { + return predicate.Subscription(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, BillingLinesTable, BillingLinesColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasBillingLinesWith applies the HasEdge predicate on the "billing_lines" edge with a given conditions (other predicates). +func HasBillingLinesWith(preds ...predicate.BillingInvoiceLine) predicate.Subscription { + return predicate.Subscription(func(s *sql.Selector) { + step := newBillingLinesStep() + sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) { + for _, p := range preds { + p(s) + } + }) + }) +} + // And groups predicates with the AND operator between them. func And(predicates ...predicate.Subscription) predicate.Subscription { return predicate.Subscription(sql.AndPredicates(predicates...)) diff --git a/openmeter/ent/db/subscription_create.go b/openmeter/ent/db/subscription_create.go index 0d988592d..a7f8045b6 100644 --- a/openmeter/ent/db/subscription_create.go +++ b/openmeter/ent/db/subscription_create.go @@ -12,6 +12,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/customer" "github.com/openmeterio/openmeter/openmeter/ent/db/plan" "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" @@ -194,6 +195,21 @@ func (sc *SubscriptionCreate) AddPhases(s ...*SubscriptionPhase) *SubscriptionCr return sc.AddPhaseIDs(ids...) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (sc *SubscriptionCreate) AddBillingLineIDs(ids ...string) *SubscriptionCreate { + sc.mutation.AddBillingLineIDs(ids...) + return sc +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (sc *SubscriptionCreate) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionCreate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return sc.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionMutation object of the builder. func (sc *SubscriptionCreate) Mutation() *SubscriptionMutation { return sc.mutation @@ -419,6 +435,22 @@ func (sc *SubscriptionCreate) createSpec() (*Subscription, *sqlgraph.CreateSpec) } _spec.Edges = append(_spec.Edges, edge) } + if nodes := sc.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges = append(_spec.Edges, edge) + } return _node, _spec } diff --git a/openmeter/ent/db/subscription_query.go b/openmeter/ent/db/subscription_query.go index 60576ee1e..39c76c263 100644 --- a/openmeter/ent/db/subscription_query.go +++ b/openmeter/ent/db/subscription_query.go @@ -13,6 +13,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/customer" "github.com/openmeterio/openmeter/openmeter/ent/db/plan" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" @@ -23,14 +24,15 @@ import ( // SubscriptionQuery is the builder for querying Subscription entities. type SubscriptionQuery struct { config - ctx *QueryContext - order []subscription.OrderOption - inters []Interceptor - predicates []predicate.Subscription - withPlan *PlanQuery - withCustomer *CustomerQuery - withPhases *SubscriptionPhaseQuery - modifiers []func(*sql.Selector) + ctx *QueryContext + order []subscription.OrderOption + inters []Interceptor + predicates []predicate.Subscription + withPlan *PlanQuery + withCustomer *CustomerQuery + withPhases *SubscriptionPhaseQuery + withBillingLines *BillingInvoiceLineQuery + modifiers []func(*sql.Selector) // intermediate query (i.e. traversal path). sql *sql.Selector path func(context.Context) (*sql.Selector, error) @@ -133,6 +135,28 @@ func (sq *SubscriptionQuery) QueryPhases() *SubscriptionPhaseQuery { return query } +// QueryBillingLines chains the current query on the "billing_lines" edge. +func (sq *SubscriptionQuery) QueryBillingLines() *BillingInvoiceLineQuery { + query := (&BillingInvoiceLineClient{config: sq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := sq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := sq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(subscription.Table, subscription.FieldID, selector), + sqlgraph.To(billinginvoiceline.Table, billinginvoiceline.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, subscription.BillingLinesTable, subscription.BillingLinesColumn), + ) + fromU = sqlgraph.SetNeighbors(sq.driver.Dialect(), step) + return fromU, nil + } + return query +} + // First returns the first Subscription entity from the query. // Returns a *NotFoundError when no Subscription was found. func (sq *SubscriptionQuery) First(ctx context.Context) (*Subscription, error) { @@ -320,14 +344,15 @@ func (sq *SubscriptionQuery) Clone() *SubscriptionQuery { return nil } return &SubscriptionQuery{ - config: sq.config, - ctx: sq.ctx.Clone(), - order: append([]subscription.OrderOption{}, sq.order...), - inters: append([]Interceptor{}, sq.inters...), - predicates: append([]predicate.Subscription{}, sq.predicates...), - withPlan: sq.withPlan.Clone(), - withCustomer: sq.withCustomer.Clone(), - withPhases: sq.withPhases.Clone(), + config: sq.config, + ctx: sq.ctx.Clone(), + order: append([]subscription.OrderOption{}, sq.order...), + inters: append([]Interceptor{}, sq.inters...), + predicates: append([]predicate.Subscription{}, sq.predicates...), + withPlan: sq.withPlan.Clone(), + withCustomer: sq.withCustomer.Clone(), + withPhases: sq.withPhases.Clone(), + withBillingLines: sq.withBillingLines.Clone(), // clone intermediate query. sql: sq.sql.Clone(), path: sq.path, @@ -367,6 +392,17 @@ func (sq *SubscriptionQuery) WithPhases(opts ...func(*SubscriptionPhaseQuery)) * return sq } +// WithBillingLines tells the query-builder to eager-load the nodes that are connected to +// the "billing_lines" edge. The optional arguments are used to configure the query builder of the edge. +func (sq *SubscriptionQuery) WithBillingLines(opts ...func(*BillingInvoiceLineQuery)) *SubscriptionQuery { + query := (&BillingInvoiceLineClient{config: sq.config}).Query() + for _, opt := range opts { + opt(query) + } + sq.withBillingLines = query + return sq +} + // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. // @@ -445,10 +481,11 @@ func (sq *SubscriptionQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([] var ( nodes = []*Subscription{} _spec = sq.querySpec() - loadedTypes = [3]bool{ + loadedTypes = [4]bool{ sq.withPlan != nil, sq.withCustomer != nil, sq.withPhases != nil, + sq.withBillingLines != nil, } ) _spec.ScanValues = func(columns []string) ([]any, error) { @@ -491,6 +528,13 @@ func (sq *SubscriptionQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([] return nil, err } } + if query := sq.withBillingLines; query != nil { + if err := sq.loadBillingLines(ctx, query, nodes, + func(n *Subscription) { n.Edges.BillingLines = []*BillingInvoiceLine{} }, + func(n *Subscription, e *BillingInvoiceLine) { n.Edges.BillingLines = append(n.Edges.BillingLines, e) }); err != nil { + return nil, err + } + } return nodes, nil } @@ -585,6 +629,40 @@ func (sq *SubscriptionQuery) loadPhases(ctx context.Context, query *Subscription } return nil } +func (sq *SubscriptionQuery) loadBillingLines(ctx context.Context, query *BillingInvoiceLineQuery, nodes []*Subscription, init func(*Subscription), assign func(*Subscription, *BillingInvoiceLine)) error { + fks := make([]driver.Value, 0, len(nodes)) + nodeids := make(map[string]*Subscription) + for i := range nodes { + fks = append(fks, nodes[i].ID) + nodeids[nodes[i].ID] = nodes[i] + if init != nil { + init(nodes[i]) + } + } + query.withFKs = true + if len(query.ctx.Fields) > 0 { + query.ctx.AppendFieldOnce(billinginvoiceline.FieldSubscriptionID) + } + query.Where(predicate.BillingInvoiceLine(func(s *sql.Selector) { + s.Where(sql.InValues(s.C(subscription.BillingLinesColumn), fks...)) + })) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + fk := n.SubscriptionID + if fk == nil { + return fmt.Errorf(`foreign-key "subscription_id" is nil for node %v`, n.ID) + } + node, ok := nodeids[*fk] + if !ok { + return fmt.Errorf(`unexpected referenced foreign-key "subscription_id" returned %v for node %v`, *fk, n.ID) + } + assign(node, n) + } + return nil +} func (sq *SubscriptionQuery) sqlCount(ctx context.Context) (int, error) { _spec := sq.querySpec() diff --git a/openmeter/ent/db/subscription_update.go b/openmeter/ent/db/subscription_update.go index ea15345d6..744c6fa02 100644 --- a/openmeter/ent/db/subscription_update.go +++ b/openmeter/ent/db/subscription_update.go @@ -11,6 +11,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/plan" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" @@ -162,6 +163,21 @@ func (su *SubscriptionUpdate) AddPhases(s ...*SubscriptionPhase) *SubscriptionUp return su.AddPhaseIDs(ids...) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (su *SubscriptionUpdate) AddBillingLineIDs(ids ...string) *SubscriptionUpdate { + su.mutation.AddBillingLineIDs(ids...) + return su +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (su *SubscriptionUpdate) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionUpdate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return su.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionMutation object of the builder. func (su *SubscriptionUpdate) Mutation() *SubscriptionMutation { return su.mutation @@ -194,6 +210,27 @@ func (su *SubscriptionUpdate) RemovePhases(s ...*SubscriptionPhase) *Subscriptio return su.RemovePhaseIDs(ids...) } +// ClearBillingLines clears all "billing_lines" edges to the BillingInvoiceLine entity. +func (su *SubscriptionUpdate) ClearBillingLines() *SubscriptionUpdate { + su.mutation.ClearBillingLines() + return su +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to BillingInvoiceLine entities by IDs. +func (su *SubscriptionUpdate) RemoveBillingLineIDs(ids ...string) *SubscriptionUpdate { + su.mutation.RemoveBillingLineIDs(ids...) + return su +} + +// RemoveBillingLines removes "billing_lines" edges to BillingInvoiceLine entities. +func (su *SubscriptionUpdate) RemoveBillingLines(b ...*BillingInvoiceLine) *SubscriptionUpdate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return su.RemoveBillingLineIDs(ids...) +} + // Save executes the query and returns the number of nodes affected by the update operation. func (su *SubscriptionUpdate) Save(ctx context.Context) (int, error) { su.defaults() @@ -359,6 +396,51 @@ func (su *SubscriptionUpdate) sqlSave(ctx context.Context) (n int, err error) { } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if su.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := su.mutation.RemovedBillingLinesIDs(); len(nodes) > 0 && !su.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := su.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } if n, err = sqlgraph.UpdateNodes(ctx, su.driver, _spec); err != nil { if _, ok := err.(*sqlgraph.NotFoundError); ok { err = &NotFoundError{subscription.Label} @@ -511,6 +593,21 @@ func (suo *SubscriptionUpdateOne) AddPhases(s ...*SubscriptionPhase) *Subscripti return suo.AddPhaseIDs(ids...) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (suo *SubscriptionUpdateOne) AddBillingLineIDs(ids ...string) *SubscriptionUpdateOne { + suo.mutation.AddBillingLineIDs(ids...) + return suo +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (suo *SubscriptionUpdateOne) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionUpdateOne { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return suo.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionMutation object of the builder. func (suo *SubscriptionUpdateOne) Mutation() *SubscriptionMutation { return suo.mutation @@ -543,6 +640,27 @@ func (suo *SubscriptionUpdateOne) RemovePhases(s ...*SubscriptionPhase) *Subscri return suo.RemovePhaseIDs(ids...) } +// ClearBillingLines clears all "billing_lines" edges to the BillingInvoiceLine entity. +func (suo *SubscriptionUpdateOne) ClearBillingLines() *SubscriptionUpdateOne { + suo.mutation.ClearBillingLines() + return suo +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to BillingInvoiceLine entities by IDs. +func (suo *SubscriptionUpdateOne) RemoveBillingLineIDs(ids ...string) *SubscriptionUpdateOne { + suo.mutation.RemoveBillingLineIDs(ids...) + return suo +} + +// RemoveBillingLines removes "billing_lines" edges to BillingInvoiceLine entities. +func (suo *SubscriptionUpdateOne) RemoveBillingLines(b ...*BillingInvoiceLine) *SubscriptionUpdateOne { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return suo.RemoveBillingLineIDs(ids...) +} + // Where appends a list predicates to the SubscriptionUpdate builder. func (suo *SubscriptionUpdateOne) Where(ps ...predicate.Subscription) *SubscriptionUpdateOne { suo.mutation.Where(ps...) @@ -738,6 +856,51 @@ func (suo *SubscriptionUpdateOne) sqlSave(ctx context.Context) (_node *Subscript } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if suo.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := suo.mutation.RemovedBillingLinesIDs(); len(nodes) > 0 && !suo.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := suo.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscription.BillingLinesTable, + Columns: []string{subscription.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } _node = &Subscription{config: suo.config} _spec.Assign = _node.assignValues _spec.ScanValues = _node.scanValues diff --git a/openmeter/ent/db/subscriptionitem.go b/openmeter/ent/db/subscriptionitem.go index 84fce4115..69c441fe9 100644 --- a/openmeter/ent/db/subscriptionitem.go +++ b/openmeter/ent/db/subscriptionitem.go @@ -72,9 +72,11 @@ type SubscriptionItemEdges struct { Phase *SubscriptionPhase `json:"phase,omitempty"` // Entitlement holds the value of the entitlement edge. Entitlement *Entitlement `json:"entitlement,omitempty"` + // BillingLines holds the value of the billing_lines edge. + BillingLines []*BillingInvoiceLine `json:"billing_lines,omitempty"` // loadedTypes holds the information for reporting if a // type was loaded (or requested) in eager-loading or not. - loadedTypes [2]bool + loadedTypes [3]bool } // PhaseOrErr returns the Phase value or an error if the edge @@ -99,6 +101,15 @@ func (e SubscriptionItemEdges) EntitlementOrErr() (*Entitlement, error) { return nil, &NotLoadedError{edge: "entitlement"} } +// BillingLinesOrErr returns the BillingLines value or an error if the edge +// was not loaded in eager-loading. +func (e SubscriptionItemEdges) BillingLinesOrErr() ([]*BillingInvoiceLine, error) { + if e.loadedTypes[2] { + return e.BillingLines, nil + } + return nil, &NotLoadedError{edge: "billing_lines"} +} + // scanValues returns the types for scanning values from sql.Rows. func (*SubscriptionItem) scanValues(columns []string) ([]any, error) { values := make([]any, len(columns)) @@ -284,6 +295,11 @@ func (si *SubscriptionItem) QueryEntitlement() *EntitlementQuery { return NewSubscriptionItemClient(si.config).QueryEntitlement(si) } +// QueryBillingLines queries the "billing_lines" edge of the SubscriptionItem entity. +func (si *SubscriptionItem) QueryBillingLines() *BillingInvoiceLineQuery { + return NewSubscriptionItemClient(si.config).QueryBillingLines(si) +} + // Update returns a builder for updating this SubscriptionItem. // Note that you need to call SubscriptionItem.Unwrap() before calling this method if this SubscriptionItem // was returned from a transaction, and the transaction was committed or rolled back. diff --git a/openmeter/ent/db/subscriptionitem/subscriptionitem.go b/openmeter/ent/db/subscriptionitem/subscriptionitem.go index 0290383a3..2af5d84bf 100644 --- a/openmeter/ent/db/subscriptionitem/subscriptionitem.go +++ b/openmeter/ent/db/subscriptionitem/subscriptionitem.go @@ -58,6 +58,8 @@ const ( EdgePhase = "phase" // EdgeEntitlement holds the string denoting the entitlement edge name in mutations. EdgeEntitlement = "entitlement" + // EdgeBillingLines holds the string denoting the billing_lines edge name in mutations. + EdgeBillingLines = "billing_lines" // Table holds the table name of the subscriptionitem in the database. Table = "subscription_items" // PhaseTable is the table that holds the phase relation/edge. @@ -74,6 +76,13 @@ const ( EntitlementInverseTable = "entitlements" // EntitlementColumn is the table column denoting the entitlement relation/edge. EntitlementColumn = "entitlement_id" + // BillingLinesTable is the table that holds the billing_lines relation/edge. + BillingLinesTable = "billing_invoice_lines" + // BillingLinesInverseTable is the table name for the BillingInvoiceLine entity. + // It exists in this package in order to avoid circular dependency with the "billinginvoiceline" package. + BillingLinesInverseTable = "billing_invoice_lines" + // BillingLinesColumn is the table column denoting the billing_lines relation/edge. + BillingLinesColumn = "subscription_item_id" ) // Columns holds all SQL columns for subscriptionitem fields. @@ -246,6 +255,20 @@ func ByEntitlementField(field string, opts ...sql.OrderTermOption) OrderOption { sqlgraph.OrderByNeighborTerms(s, newEntitlementStep(), sql.OrderByField(field, opts...)) } } + +// ByBillingLinesCount orders the results by billing_lines count. +func ByBillingLinesCount(opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborsCount(s, newBillingLinesStep(), opts...) + } +} + +// ByBillingLines orders the results by billing_lines terms. +func ByBillingLines(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newBillingLinesStep(), append([]sql.OrderTerm{term}, terms...)...) + } +} func newPhaseStep() *sqlgraph.Step { return sqlgraph.NewStep( sqlgraph.From(Table, FieldID), @@ -260,3 +283,10 @@ func newEntitlementStep() *sqlgraph.Step { sqlgraph.Edge(sqlgraph.M2O, true, EntitlementTable, EntitlementColumn), ) } +func newBillingLinesStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(BillingLinesInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, BillingLinesTable, BillingLinesColumn), + ) +} diff --git a/openmeter/ent/db/subscriptionitem/where.go b/openmeter/ent/db/subscriptionitem/where.go index 461ea8685..f7b043873 100644 --- a/openmeter/ent/db/subscriptionitem/where.go +++ b/openmeter/ent/db/subscriptionitem/where.go @@ -1217,6 +1217,29 @@ func HasEntitlementWith(preds ...predicate.Entitlement) predicate.SubscriptionIt }) } +// HasBillingLines applies the HasEdge predicate on the "billing_lines" edge. +func HasBillingLines() predicate.SubscriptionItem { + return predicate.SubscriptionItem(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, BillingLinesTable, BillingLinesColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasBillingLinesWith applies the HasEdge predicate on the "billing_lines" edge with a given conditions (other predicates). +func HasBillingLinesWith(preds ...predicate.BillingInvoiceLine) predicate.SubscriptionItem { + return predicate.SubscriptionItem(func(s *sql.Selector) { + step := newBillingLinesStep() + sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) { + for _, p := range preds { + p(s) + } + }) + }) +} + // And groups predicates with the AND operator between them. func And(predicates ...predicate.SubscriptionItem) predicate.SubscriptionItem { return predicate.SubscriptionItem(sql.AndPredicates(predicates...)) diff --git a/openmeter/ent/db/subscriptionitem_create.go b/openmeter/ent/db/subscriptionitem_create.go index 5d2057d64..4fa72ec6b 100644 --- a/openmeter/ent/db/subscriptionitem_create.go +++ b/openmeter/ent/db/subscriptionitem_create.go @@ -12,6 +12,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/entitlement" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" @@ -245,6 +246,21 @@ func (sic *SubscriptionItemCreate) SetEntitlement(e *Entitlement) *SubscriptionI return sic.SetEntitlementID(e.ID) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (sic *SubscriptionItemCreate) AddBillingLineIDs(ids ...string) *SubscriptionItemCreate { + sic.mutation.AddBillingLineIDs(ids...) + return sic +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (sic *SubscriptionItemCreate) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionItemCreate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return sic.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionItemMutation object of the builder. func (sic *SubscriptionItemCreate) Mutation() *SubscriptionItemMutation { return sic.mutation @@ -508,6 +524,22 @@ func (sic *SubscriptionItemCreate) createSpec() (*SubscriptionItem, *sqlgraph.Cr _node.EntitlementID = &nodes[0] _spec.Edges = append(_spec.Edges, edge) } + if nodes := sic.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges = append(_spec.Edges, edge) + } return _node, _spec, nil } diff --git a/openmeter/ent/db/subscriptionitem_query.go b/openmeter/ent/db/subscriptionitem_query.go index 5d77969f9..3b9ee87c8 100644 --- a/openmeter/ent/db/subscriptionitem_query.go +++ b/openmeter/ent/db/subscriptionitem_query.go @@ -4,6 +4,7 @@ package db import ( "context" + "database/sql/driver" "fmt" "math" @@ -12,6 +13,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/entitlement" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" @@ -21,13 +23,14 @@ import ( // SubscriptionItemQuery is the builder for querying SubscriptionItem entities. type SubscriptionItemQuery struct { config - ctx *QueryContext - order []subscriptionitem.OrderOption - inters []Interceptor - predicates []predicate.SubscriptionItem - withPhase *SubscriptionPhaseQuery - withEntitlement *EntitlementQuery - modifiers []func(*sql.Selector) + ctx *QueryContext + order []subscriptionitem.OrderOption + inters []Interceptor + predicates []predicate.SubscriptionItem + withPhase *SubscriptionPhaseQuery + withEntitlement *EntitlementQuery + withBillingLines *BillingInvoiceLineQuery + modifiers []func(*sql.Selector) // intermediate query (i.e. traversal path). sql *sql.Selector path func(context.Context) (*sql.Selector, error) @@ -108,6 +111,28 @@ func (siq *SubscriptionItemQuery) QueryEntitlement() *EntitlementQuery { return query } +// QueryBillingLines chains the current query on the "billing_lines" edge. +func (siq *SubscriptionItemQuery) QueryBillingLines() *BillingInvoiceLineQuery { + query := (&BillingInvoiceLineClient{config: siq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := siq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := siq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(subscriptionitem.Table, subscriptionitem.FieldID, selector), + sqlgraph.To(billinginvoiceline.Table, billinginvoiceline.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, subscriptionitem.BillingLinesTable, subscriptionitem.BillingLinesColumn), + ) + fromU = sqlgraph.SetNeighbors(siq.driver.Dialect(), step) + return fromU, nil + } + return query +} + // First returns the first SubscriptionItem entity from the query. // Returns a *NotFoundError when no SubscriptionItem was found. func (siq *SubscriptionItemQuery) First(ctx context.Context) (*SubscriptionItem, error) { @@ -295,13 +320,14 @@ func (siq *SubscriptionItemQuery) Clone() *SubscriptionItemQuery { return nil } return &SubscriptionItemQuery{ - config: siq.config, - ctx: siq.ctx.Clone(), - order: append([]subscriptionitem.OrderOption{}, siq.order...), - inters: append([]Interceptor{}, siq.inters...), - predicates: append([]predicate.SubscriptionItem{}, siq.predicates...), - withPhase: siq.withPhase.Clone(), - withEntitlement: siq.withEntitlement.Clone(), + config: siq.config, + ctx: siq.ctx.Clone(), + order: append([]subscriptionitem.OrderOption{}, siq.order...), + inters: append([]Interceptor{}, siq.inters...), + predicates: append([]predicate.SubscriptionItem{}, siq.predicates...), + withPhase: siq.withPhase.Clone(), + withEntitlement: siq.withEntitlement.Clone(), + withBillingLines: siq.withBillingLines.Clone(), // clone intermediate query. sql: siq.sql.Clone(), path: siq.path, @@ -330,6 +356,17 @@ func (siq *SubscriptionItemQuery) WithEntitlement(opts ...func(*EntitlementQuery return siq } +// WithBillingLines tells the query-builder to eager-load the nodes that are connected to +// the "billing_lines" edge. The optional arguments are used to configure the query builder of the edge. +func (siq *SubscriptionItemQuery) WithBillingLines(opts ...func(*BillingInvoiceLineQuery)) *SubscriptionItemQuery { + query := (&BillingInvoiceLineClient{config: siq.config}).Query() + for _, opt := range opts { + opt(query) + } + siq.withBillingLines = query + return siq +} + // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. // @@ -408,9 +445,10 @@ func (siq *SubscriptionItemQuery) sqlAll(ctx context.Context, hooks ...queryHook var ( nodes = []*SubscriptionItem{} _spec = siq.querySpec() - loadedTypes = [2]bool{ + loadedTypes = [3]bool{ siq.withPhase != nil, siq.withEntitlement != nil, + siq.withBillingLines != nil, } ) _spec.ScanValues = func(columns []string) ([]any, error) { @@ -446,6 +484,15 @@ func (siq *SubscriptionItemQuery) sqlAll(ctx context.Context, hooks ...queryHook return nil, err } } + if query := siq.withBillingLines; query != nil { + if err := siq.loadBillingLines(ctx, query, nodes, + func(n *SubscriptionItem) { n.Edges.BillingLines = []*BillingInvoiceLine{} }, + func(n *SubscriptionItem, e *BillingInvoiceLine) { + n.Edges.BillingLines = append(n.Edges.BillingLines, e) + }); err != nil { + return nil, err + } + } return nodes, nil } @@ -510,6 +557,40 @@ func (siq *SubscriptionItemQuery) loadEntitlement(ctx context.Context, query *En } return nil } +func (siq *SubscriptionItemQuery) loadBillingLines(ctx context.Context, query *BillingInvoiceLineQuery, nodes []*SubscriptionItem, init func(*SubscriptionItem), assign func(*SubscriptionItem, *BillingInvoiceLine)) error { + fks := make([]driver.Value, 0, len(nodes)) + nodeids := make(map[string]*SubscriptionItem) + for i := range nodes { + fks = append(fks, nodes[i].ID) + nodeids[nodes[i].ID] = nodes[i] + if init != nil { + init(nodes[i]) + } + } + query.withFKs = true + if len(query.ctx.Fields) > 0 { + query.ctx.AppendFieldOnce(billinginvoiceline.FieldSubscriptionItemID) + } + query.Where(predicate.BillingInvoiceLine(func(s *sql.Selector) { + s.Where(sql.InValues(s.C(subscriptionitem.BillingLinesColumn), fks...)) + })) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + fk := n.SubscriptionItemID + if fk == nil { + return fmt.Errorf(`foreign-key "subscription_item_id" is nil for node %v`, n.ID) + } + node, ok := nodeids[*fk] + if !ok { + return fmt.Errorf(`unexpected referenced foreign-key "subscription_item_id" returned %v for node %v`, *fk, n.ID) + } + assign(node, n) + } + return nil +} func (siq *SubscriptionItemQuery) sqlCount(ctx context.Context) (int, error) { _spec := siq.querySpec() diff --git a/openmeter/ent/db/subscriptionitem_update.go b/openmeter/ent/db/subscriptionitem_update.go index 4895a1036..b8fd225da 100644 --- a/openmeter/ent/db/subscriptionitem_update.go +++ b/openmeter/ent/db/subscriptionitem_update.go @@ -11,6 +11,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/entitlement" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" @@ -278,6 +279,21 @@ func (siu *SubscriptionItemUpdate) SetEntitlement(e *Entitlement) *SubscriptionI return siu.SetEntitlementID(e.ID) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (siu *SubscriptionItemUpdate) AddBillingLineIDs(ids ...string) *SubscriptionItemUpdate { + siu.mutation.AddBillingLineIDs(ids...) + return siu +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (siu *SubscriptionItemUpdate) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionItemUpdate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return siu.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionItemMutation object of the builder. func (siu *SubscriptionItemUpdate) Mutation() *SubscriptionItemMutation { return siu.mutation @@ -289,6 +305,27 @@ func (siu *SubscriptionItemUpdate) ClearEntitlement() *SubscriptionItemUpdate { return siu } +// ClearBillingLines clears all "billing_lines" edges to the BillingInvoiceLine entity. +func (siu *SubscriptionItemUpdate) ClearBillingLines() *SubscriptionItemUpdate { + siu.mutation.ClearBillingLines() + return siu +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to BillingInvoiceLine entities by IDs. +func (siu *SubscriptionItemUpdate) RemoveBillingLineIDs(ids ...string) *SubscriptionItemUpdate { + siu.mutation.RemoveBillingLineIDs(ids...) + return siu +} + +// RemoveBillingLines removes "billing_lines" edges to BillingInvoiceLine entities. +func (siu *SubscriptionItemUpdate) RemoveBillingLines(b ...*BillingInvoiceLine) *SubscriptionItemUpdate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return siu.RemoveBillingLineIDs(ids...) +} + // Save executes the query and returns the number of nodes affected by the update operation. func (siu *SubscriptionItemUpdate) Save(ctx context.Context) (int, error) { siu.defaults() @@ -481,6 +518,51 @@ func (siu *SubscriptionItemUpdate) sqlSave(ctx context.Context) (n int, err erro } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if siu.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := siu.mutation.RemovedBillingLinesIDs(); len(nodes) > 0 && !siu.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := siu.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } if n, err = sqlgraph.UpdateNodes(ctx, siu.driver, _spec); err != nil { if _, ok := err.(*sqlgraph.NotFoundError); ok { err = &NotFoundError{subscriptionitem.Label} @@ -748,6 +830,21 @@ func (siuo *SubscriptionItemUpdateOne) SetEntitlement(e *Entitlement) *Subscript return siuo.SetEntitlementID(e.ID) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (siuo *SubscriptionItemUpdateOne) AddBillingLineIDs(ids ...string) *SubscriptionItemUpdateOne { + siuo.mutation.AddBillingLineIDs(ids...) + return siuo +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (siuo *SubscriptionItemUpdateOne) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionItemUpdateOne { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return siuo.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionItemMutation object of the builder. func (siuo *SubscriptionItemUpdateOne) Mutation() *SubscriptionItemMutation { return siuo.mutation @@ -759,6 +856,27 @@ func (siuo *SubscriptionItemUpdateOne) ClearEntitlement() *SubscriptionItemUpdat return siuo } +// ClearBillingLines clears all "billing_lines" edges to the BillingInvoiceLine entity. +func (siuo *SubscriptionItemUpdateOne) ClearBillingLines() *SubscriptionItemUpdateOne { + siuo.mutation.ClearBillingLines() + return siuo +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to BillingInvoiceLine entities by IDs. +func (siuo *SubscriptionItemUpdateOne) RemoveBillingLineIDs(ids ...string) *SubscriptionItemUpdateOne { + siuo.mutation.RemoveBillingLineIDs(ids...) + return siuo +} + +// RemoveBillingLines removes "billing_lines" edges to BillingInvoiceLine entities. +func (siuo *SubscriptionItemUpdateOne) RemoveBillingLines(b ...*BillingInvoiceLine) *SubscriptionItemUpdateOne { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return siuo.RemoveBillingLineIDs(ids...) +} + // Where appends a list predicates to the SubscriptionItemUpdate builder. func (siuo *SubscriptionItemUpdateOne) Where(ps ...predicate.SubscriptionItem) *SubscriptionItemUpdateOne { siuo.mutation.Where(ps...) @@ -981,6 +1099,51 @@ func (siuo *SubscriptionItemUpdateOne) sqlSave(ctx context.Context) (_node *Subs } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if siuo.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := siuo.mutation.RemovedBillingLinesIDs(); len(nodes) > 0 && !siuo.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := siuo.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionitem.BillingLinesTable, + Columns: []string{subscriptionitem.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } _node = &SubscriptionItem{config: siuo.config} _spec.Assign = _node.assignValues _spec.ScanValues = _node.scanValues diff --git a/openmeter/ent/db/subscriptionphase.go b/openmeter/ent/db/subscriptionphase.go index 09fc38c2e..aab3d5055 100644 --- a/openmeter/ent/db/subscriptionphase.go +++ b/openmeter/ent/db/subscriptionphase.go @@ -51,9 +51,11 @@ type SubscriptionPhaseEdges struct { Subscription *Subscription `json:"subscription,omitempty"` // Items holds the value of the items edge. Items []*SubscriptionItem `json:"items,omitempty"` + // BillingLines holds the value of the billing_lines edge. + BillingLines []*BillingInvoiceLine `json:"billing_lines,omitempty"` // loadedTypes holds the information for reporting if a // type was loaded (or requested) in eager-loading or not. - loadedTypes [2]bool + loadedTypes [3]bool } // SubscriptionOrErr returns the Subscription value or an error if the edge @@ -76,6 +78,15 @@ func (e SubscriptionPhaseEdges) ItemsOrErr() ([]*SubscriptionItem, error) { return nil, &NotLoadedError{edge: "items"} } +// BillingLinesOrErr returns the BillingLines value or an error if the edge +// was not loaded in eager-loading. +func (e SubscriptionPhaseEdges) BillingLinesOrErr() ([]*BillingInvoiceLine, error) { + if e.loadedTypes[2] { + return e.BillingLines, nil + } + return nil, &NotLoadedError{edge: "billing_lines"} +} + // scanValues returns the types for scanning values from sql.Rows. func (*SubscriptionPhase) scanValues(columns []string) ([]any, error) { values := make([]any, len(columns)) @@ -195,6 +206,11 @@ func (sp *SubscriptionPhase) QueryItems() *SubscriptionItemQuery { return NewSubscriptionPhaseClient(sp.config).QueryItems(sp) } +// QueryBillingLines queries the "billing_lines" edge of the SubscriptionPhase entity. +func (sp *SubscriptionPhase) QueryBillingLines() *BillingInvoiceLineQuery { + return NewSubscriptionPhaseClient(sp.config).QueryBillingLines(sp) +} + // Update returns a builder for updating this SubscriptionPhase. // Note that you need to call SubscriptionPhase.Unwrap() before calling this method if this SubscriptionPhase // was returned from a transaction, and the transaction was committed or rolled back. diff --git a/openmeter/ent/db/subscriptionphase/subscriptionphase.go b/openmeter/ent/db/subscriptionphase/subscriptionphase.go index e9db3f570..6866f57d4 100644 --- a/openmeter/ent/db/subscriptionphase/subscriptionphase.go +++ b/openmeter/ent/db/subscriptionphase/subscriptionphase.go @@ -38,6 +38,8 @@ const ( EdgeSubscription = "subscription" // EdgeItems holds the string denoting the items edge name in mutations. EdgeItems = "items" + // EdgeBillingLines holds the string denoting the billing_lines edge name in mutations. + EdgeBillingLines = "billing_lines" // Table holds the table name of the subscriptionphase in the database. Table = "subscription_phases" // SubscriptionTable is the table that holds the subscription relation/edge. @@ -54,6 +56,13 @@ const ( ItemsInverseTable = "subscription_items" // ItemsColumn is the table column denoting the items relation/edge. ItemsColumn = "phase_id" + // BillingLinesTable is the table that holds the billing_lines relation/edge. + BillingLinesTable = "billing_invoice_lines" + // BillingLinesInverseTable is the table name for the BillingInvoiceLine entity. + // It exists in this package in order to avoid circular dependency with the "billinginvoiceline" package. + BillingLinesInverseTable = "billing_invoice_lines" + // BillingLinesColumn is the table column denoting the billing_lines relation/edge. + BillingLinesColumn = "subscription_phase_id" ) // Columns holds all SQL columns for subscriptionphase fields. @@ -173,6 +182,20 @@ func ByItems(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { sqlgraph.OrderByNeighborTerms(s, newItemsStep(), append([]sql.OrderTerm{term}, terms...)...) } } + +// ByBillingLinesCount orders the results by billing_lines count. +func ByBillingLinesCount(opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborsCount(s, newBillingLinesStep(), opts...) + } +} + +// ByBillingLines orders the results by billing_lines terms. +func ByBillingLines(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newBillingLinesStep(), append([]sql.OrderTerm{term}, terms...)...) + } +} func newSubscriptionStep() *sqlgraph.Step { return sqlgraph.NewStep( sqlgraph.From(Table, FieldID), @@ -187,3 +210,10 @@ func newItemsStep() *sqlgraph.Step { sqlgraph.Edge(sqlgraph.O2M, false, ItemsTable, ItemsColumn), ) } +func newBillingLinesStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(BillingLinesInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, BillingLinesTable, BillingLinesColumn), + ) +} diff --git a/openmeter/ent/db/subscriptionphase/where.go b/openmeter/ent/db/subscriptionphase/where.go index 047aa66ca..cfb8a9eae 100644 --- a/openmeter/ent/db/subscriptionphase/where.go +++ b/openmeter/ent/db/subscriptionphase/where.go @@ -671,6 +671,29 @@ func HasItemsWith(preds ...predicate.SubscriptionItem) predicate.SubscriptionPha }) } +// HasBillingLines applies the HasEdge predicate on the "billing_lines" edge. +func HasBillingLines() predicate.SubscriptionPhase { + return predicate.SubscriptionPhase(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, BillingLinesTable, BillingLinesColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasBillingLinesWith applies the HasEdge predicate on the "billing_lines" edge with a given conditions (other predicates). +func HasBillingLinesWith(preds ...predicate.BillingInvoiceLine) predicate.SubscriptionPhase { + return predicate.SubscriptionPhase(func(s *sql.Selector) { + step := newBillingLinesStep() + sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) { + for _, p := range preds { + p(s) + } + }) + }) +} + // And groups predicates with the AND operator between them. func And(predicates ...predicate.SubscriptionPhase) predicate.SubscriptionPhase { return predicate.SubscriptionPhase(sql.AndPredicates(predicates...)) diff --git a/openmeter/ent/db/subscriptionphase_create.go b/openmeter/ent/db/subscriptionphase_create.go index dc8a04819..7a760c44c 100644 --- a/openmeter/ent/db/subscriptionphase_create.go +++ b/openmeter/ent/db/subscriptionphase_create.go @@ -12,6 +12,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" @@ -151,6 +152,21 @@ func (spc *SubscriptionPhaseCreate) AddItems(s ...*SubscriptionItem) *Subscripti return spc.AddItemIDs(ids...) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (spc *SubscriptionPhaseCreate) AddBillingLineIDs(ids ...string) *SubscriptionPhaseCreate { + spc.mutation.AddBillingLineIDs(ids...) + return spc +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (spc *SubscriptionPhaseCreate) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionPhaseCreate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return spc.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionPhaseMutation object of the builder. func (spc *SubscriptionPhaseCreate) Mutation() *SubscriptionPhaseMutation { return spc.mutation @@ -351,6 +367,22 @@ func (spc *SubscriptionPhaseCreate) createSpec() (*SubscriptionPhase, *sqlgraph. } _spec.Edges = append(_spec.Edges, edge) } + if nodes := spc.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges = append(_spec.Edges, edge) + } return _node, _spec } diff --git a/openmeter/ent/db/subscriptionphase_query.go b/openmeter/ent/db/subscriptionphase_query.go index 0559429fd..a9a45e867 100644 --- a/openmeter/ent/db/subscriptionphase_query.go +++ b/openmeter/ent/db/subscriptionphase_query.go @@ -13,6 +13,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" "github.com/openmeterio/openmeter/openmeter/ent/db/subscription" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" @@ -28,6 +29,7 @@ type SubscriptionPhaseQuery struct { predicates []predicate.SubscriptionPhase withSubscription *SubscriptionQuery withItems *SubscriptionItemQuery + withBillingLines *BillingInvoiceLineQuery modifiers []func(*sql.Selector) // intermediate query (i.e. traversal path). sql *sql.Selector @@ -109,6 +111,28 @@ func (spq *SubscriptionPhaseQuery) QueryItems() *SubscriptionItemQuery { return query } +// QueryBillingLines chains the current query on the "billing_lines" edge. +func (spq *SubscriptionPhaseQuery) QueryBillingLines() *BillingInvoiceLineQuery { + query := (&BillingInvoiceLineClient{config: spq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := spq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := spq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(subscriptionphase.Table, subscriptionphase.FieldID, selector), + sqlgraph.To(billinginvoiceline.Table, billinginvoiceline.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, subscriptionphase.BillingLinesTable, subscriptionphase.BillingLinesColumn), + ) + fromU = sqlgraph.SetNeighbors(spq.driver.Dialect(), step) + return fromU, nil + } + return query +} + // First returns the first SubscriptionPhase entity from the query. // Returns a *NotFoundError when no SubscriptionPhase was found. func (spq *SubscriptionPhaseQuery) First(ctx context.Context) (*SubscriptionPhase, error) { @@ -303,6 +327,7 @@ func (spq *SubscriptionPhaseQuery) Clone() *SubscriptionPhaseQuery { predicates: append([]predicate.SubscriptionPhase{}, spq.predicates...), withSubscription: spq.withSubscription.Clone(), withItems: spq.withItems.Clone(), + withBillingLines: spq.withBillingLines.Clone(), // clone intermediate query. sql: spq.sql.Clone(), path: spq.path, @@ -331,6 +356,17 @@ func (spq *SubscriptionPhaseQuery) WithItems(opts ...func(*SubscriptionItemQuery return spq } +// WithBillingLines tells the query-builder to eager-load the nodes that are connected to +// the "billing_lines" edge. The optional arguments are used to configure the query builder of the edge. +func (spq *SubscriptionPhaseQuery) WithBillingLines(opts ...func(*BillingInvoiceLineQuery)) *SubscriptionPhaseQuery { + query := (&BillingInvoiceLineClient{config: spq.config}).Query() + for _, opt := range opts { + opt(query) + } + spq.withBillingLines = query + return spq +} + // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. // @@ -409,9 +445,10 @@ func (spq *SubscriptionPhaseQuery) sqlAll(ctx context.Context, hooks ...queryHoo var ( nodes = []*SubscriptionPhase{} _spec = spq.querySpec() - loadedTypes = [2]bool{ + loadedTypes = [3]bool{ spq.withSubscription != nil, spq.withItems != nil, + spq.withBillingLines != nil, } ) _spec.ScanValues = func(columns []string) ([]any, error) { @@ -448,6 +485,15 @@ func (spq *SubscriptionPhaseQuery) sqlAll(ctx context.Context, hooks ...queryHoo return nil, err } } + if query := spq.withBillingLines; query != nil { + if err := spq.loadBillingLines(ctx, query, nodes, + func(n *SubscriptionPhase) { n.Edges.BillingLines = []*BillingInvoiceLine{} }, + func(n *SubscriptionPhase, e *BillingInvoiceLine) { + n.Edges.BillingLines = append(n.Edges.BillingLines, e) + }); err != nil { + return nil, err + } + } return nodes, nil } @@ -510,6 +556,40 @@ func (spq *SubscriptionPhaseQuery) loadItems(ctx context.Context, query *Subscri } return nil } +func (spq *SubscriptionPhaseQuery) loadBillingLines(ctx context.Context, query *BillingInvoiceLineQuery, nodes []*SubscriptionPhase, init func(*SubscriptionPhase), assign func(*SubscriptionPhase, *BillingInvoiceLine)) error { + fks := make([]driver.Value, 0, len(nodes)) + nodeids := make(map[string]*SubscriptionPhase) + for i := range nodes { + fks = append(fks, nodes[i].ID) + nodeids[nodes[i].ID] = nodes[i] + if init != nil { + init(nodes[i]) + } + } + query.withFKs = true + if len(query.ctx.Fields) > 0 { + query.ctx.AppendFieldOnce(billinginvoiceline.FieldSubscriptionPhaseID) + } + query.Where(predicate.BillingInvoiceLine(func(s *sql.Selector) { + s.Where(sql.InValues(s.C(subscriptionphase.BillingLinesColumn), fks...)) + })) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + fk := n.SubscriptionPhaseID + if fk == nil { + return fmt.Errorf(`foreign-key "subscription_phase_id" is nil for node %v`, n.ID) + } + node, ok := nodeids[*fk] + if !ok { + return fmt.Errorf(`unexpected referenced foreign-key "subscription_phase_id" returned %v for node %v`, *fk, n.ID) + } + assign(node, n) + } + return nil +} func (spq *SubscriptionPhaseQuery) sqlCount(ctx context.Context) (int, error) { _spec := spq.querySpec() diff --git a/openmeter/ent/db/subscriptionphase_update.go b/openmeter/ent/db/subscriptionphase_update.go index c9f36d9ea..3b1a1bb5b 100644 --- a/openmeter/ent/db/subscriptionphase_update.go +++ b/openmeter/ent/db/subscriptionphase_update.go @@ -11,6 +11,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/dialect/sql/sqlgraph" "entgo.io/ent/schema/field" + "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceline" "github.com/openmeterio/openmeter/openmeter/ent/db/predicate" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionitem" "github.com/openmeterio/openmeter/openmeter/ent/db/subscriptionphase" @@ -116,6 +117,21 @@ func (spu *SubscriptionPhaseUpdate) AddItems(s ...*SubscriptionItem) *Subscripti return spu.AddItemIDs(ids...) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (spu *SubscriptionPhaseUpdate) AddBillingLineIDs(ids ...string) *SubscriptionPhaseUpdate { + spu.mutation.AddBillingLineIDs(ids...) + return spu +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (spu *SubscriptionPhaseUpdate) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionPhaseUpdate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return spu.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionPhaseMutation object of the builder. func (spu *SubscriptionPhaseUpdate) Mutation() *SubscriptionPhaseMutation { return spu.mutation @@ -142,6 +158,27 @@ func (spu *SubscriptionPhaseUpdate) RemoveItems(s ...*SubscriptionItem) *Subscri return spu.RemoveItemIDs(ids...) } +// ClearBillingLines clears all "billing_lines" edges to the BillingInvoiceLine entity. +func (spu *SubscriptionPhaseUpdate) ClearBillingLines() *SubscriptionPhaseUpdate { + spu.mutation.ClearBillingLines() + return spu +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to BillingInvoiceLine entities by IDs. +func (spu *SubscriptionPhaseUpdate) RemoveBillingLineIDs(ids ...string) *SubscriptionPhaseUpdate { + spu.mutation.RemoveBillingLineIDs(ids...) + return spu +} + +// RemoveBillingLines removes "billing_lines" edges to BillingInvoiceLine entities. +func (spu *SubscriptionPhaseUpdate) RemoveBillingLines(b ...*BillingInvoiceLine) *SubscriptionPhaseUpdate { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return spu.RemoveBillingLineIDs(ids...) +} + // Save executes the query and returns the number of nodes affected by the update operation. func (spu *SubscriptionPhaseUpdate) Save(ctx context.Context) (int, error) { spu.defaults() @@ -272,6 +309,51 @@ func (spu *SubscriptionPhaseUpdate) sqlSave(ctx context.Context) (n int, err err } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if spu.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := spu.mutation.RemovedBillingLinesIDs(); len(nodes) > 0 && !spu.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := spu.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } if n, err = sqlgraph.UpdateNodes(ctx, spu.driver, _spec); err != nil { if _, ok := err.(*sqlgraph.NotFoundError); ok { err = &NotFoundError{subscriptionphase.Label} @@ -379,6 +461,21 @@ func (spuo *SubscriptionPhaseUpdateOne) AddItems(s ...*SubscriptionItem) *Subscr return spuo.AddItemIDs(ids...) } +// AddBillingLineIDs adds the "billing_lines" edge to the BillingInvoiceLine entity by IDs. +func (spuo *SubscriptionPhaseUpdateOne) AddBillingLineIDs(ids ...string) *SubscriptionPhaseUpdateOne { + spuo.mutation.AddBillingLineIDs(ids...) + return spuo +} + +// AddBillingLines adds the "billing_lines" edges to the BillingInvoiceLine entity. +func (spuo *SubscriptionPhaseUpdateOne) AddBillingLines(b ...*BillingInvoiceLine) *SubscriptionPhaseUpdateOne { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return spuo.AddBillingLineIDs(ids...) +} + // Mutation returns the SubscriptionPhaseMutation object of the builder. func (spuo *SubscriptionPhaseUpdateOne) Mutation() *SubscriptionPhaseMutation { return spuo.mutation @@ -405,6 +502,27 @@ func (spuo *SubscriptionPhaseUpdateOne) RemoveItems(s ...*SubscriptionItem) *Sub return spuo.RemoveItemIDs(ids...) } +// ClearBillingLines clears all "billing_lines" edges to the BillingInvoiceLine entity. +func (spuo *SubscriptionPhaseUpdateOne) ClearBillingLines() *SubscriptionPhaseUpdateOne { + spuo.mutation.ClearBillingLines() + return spuo +} + +// RemoveBillingLineIDs removes the "billing_lines" edge to BillingInvoiceLine entities by IDs. +func (spuo *SubscriptionPhaseUpdateOne) RemoveBillingLineIDs(ids ...string) *SubscriptionPhaseUpdateOne { + spuo.mutation.RemoveBillingLineIDs(ids...) + return spuo +} + +// RemoveBillingLines removes "billing_lines" edges to BillingInvoiceLine entities. +func (spuo *SubscriptionPhaseUpdateOne) RemoveBillingLines(b ...*BillingInvoiceLine) *SubscriptionPhaseUpdateOne { + ids := make([]string, len(b)) + for i := range b { + ids[i] = b[i].ID + } + return spuo.RemoveBillingLineIDs(ids...) +} + // Where appends a list predicates to the SubscriptionPhaseUpdate builder. func (spuo *SubscriptionPhaseUpdateOne) Where(ps ...predicate.SubscriptionPhase) *SubscriptionPhaseUpdateOne { spuo.mutation.Where(ps...) @@ -565,6 +683,51 @@ func (spuo *SubscriptionPhaseUpdateOne) sqlSave(ctx context.Context) (_node *Sub } _spec.Edges.Add = append(_spec.Edges.Add, edge) } + if spuo.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := spuo.mutation.RemovedBillingLinesIDs(); len(nodes) > 0 && !spuo.mutation.BillingLinesCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := spuo.mutation.BillingLinesIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: subscriptionphase.BillingLinesTable, + Columns: []string{subscriptionphase.BillingLinesColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(billinginvoiceline.FieldID, field.TypeString), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } _node = &SubscriptionPhase{config: spuo.config} _spec.Assign = _node.assignValues _spec.ScanValues = _node.scanValues diff --git a/openmeter/ent/schema/billing.go b/openmeter/ent/schema/billing.go index e3796cc1a..c50b7a2f0 100644 --- a/openmeter/ent/schema/billing.go +++ b/openmeter/ent/schema/billing.go @@ -336,6 +336,19 @@ func (BillingInvoiceLine) Fields() []ent.Field { field.String("child_unique_reference_id"). Optional(). Nillable(), + + // Subscriptions metadata + field.String("subscription_id"). + Optional(). + Nillable(), + + field.String("subscription_phase_id"). + Optional(). + Nillable(), + + field.String("subscription_item_id"). + Optional(). + Nillable(), } } @@ -347,6 +360,7 @@ func (BillingInvoiceLine) Indexes() []ent.Index { Annotations( entsql.IndexWhere("child_unique_reference_id IS NOT NULL AND deleted_at IS NULL"), ).Unique(), + index.Fields("namespace", "subscription_id", "subscription_phase_id", "subscription_item_id"), } } @@ -372,6 +386,18 @@ func (BillingInvoiceLine) Edges() []ent.Edge { Annotations(entsql.OnDelete(entsql.Cascade)), edge.To("line_discounts", BillingInvoiceLineDiscount.Type). Annotations(entsql.OnDelete(entsql.Cascade)), + edge.From("subscription", Subscription.Type). + Ref("billing_lines"). + Field("subscription_id"). + Unique(), + edge.From("subscription_phase", SubscriptionPhase.Type). + Ref("billing_lines"). + Field("subscription_phase_id"). + Unique(), + edge.From("subscription_item", SubscriptionItem.Type). + Ref("billing_lines"). + Field("subscription_item_id"). + Unique(), } } diff --git a/openmeter/ent/schema/subscription.go b/openmeter/ent/schema/subscription.go index 6fc0f40ca..0574eef7e 100644 --- a/openmeter/ent/schema/subscription.go +++ b/openmeter/ent/schema/subscription.go @@ -49,6 +49,7 @@ func (Subscription) Edges() []ent.Edge { edge.From("plan", Plan.Type).Field("plan_id").Ref("subscriptions").Unique(), edge.From("customer", Customer.Type).Field("customer_id").Ref("subscription").Immutable().Unique().Required(), edge.To("phases", SubscriptionPhase.Type), + edge.To("billing_lines", BillingInvoiceLine.Type), } } @@ -87,6 +88,7 @@ func (SubscriptionPhase) Edges() []ent.Edge { return []ent.Edge{ edge.From("subscription", Subscription.Type).Field("subscription_id").Ref("phases").Unique().Immutable().Required(), edge.To("items", SubscriptionItem.Type), + edge.To("billing_lines", BillingInvoiceLine.Type), } } @@ -163,5 +165,6 @@ func (SubscriptionItem) Edges() []ent.Edge { return []ent.Edge{ edge.From("phase", SubscriptionPhase.Type).Field("phase_id").Ref("items").Unique().Immutable().Required(), edge.From("entitlement", Entitlement.Type).Field("entitlement_id").Ref("subscription_item").Unique(), + edge.To("billing_lines", BillingInvoiceLine.Type), } } diff --git a/tools/migrate/migrations/20241213152122_billing-subscription-linking.down.sql b/tools/migrate/migrations/20241213152122_billing-subscription-linking.down.sql new file mode 100644 index 000000000..4bd614fdb --- /dev/null +++ b/tools/migrate/migrations/20241213152122_billing-subscription-linking.down.sql @@ -0,0 +1,4 @@ +-- reverse: create index "billinginvoiceline_namespace_subscription_id_subscription_phase" to table: "billing_invoice_lines" +DROP INDEX "billinginvoiceline_namespace_subscription_id_subscription_phase"; +-- reverse: modify "billing_invoice_lines" table +ALTER TABLE "billing_invoice_lines" DROP CONSTRAINT "billing_invoice_lines_subscriptions_billing_lines", DROP CONSTRAINT "billing_invoice_lines_subscription_phases_billing_lines", DROP CONSTRAINT "billing_invoice_lines_subscription_items_billing_lines", DROP COLUMN "subscription_phase_id", DROP COLUMN "subscription_item_id", DROP COLUMN "subscription_id"; diff --git a/tools/migrate/migrations/20241213152122_billing-subscription-linking.up.sql b/tools/migrate/migrations/20241213152122_billing-subscription-linking.up.sql new file mode 100644 index 000000000..15c1a3eaa --- /dev/null +++ b/tools/migrate/migrations/20241213152122_billing-subscription-linking.up.sql @@ -0,0 +1,7 @@ +-- modify "billing_invoice_lines" table +ALTER TABLE "billing_invoice_lines" ADD COLUMN "subscription_id" character(26) NULL, ADD COLUMN "subscription_item_id" character(26) NULL, ADD COLUMN "subscription_phase_id" character(26) NULL, ADD + CONSTRAINT "billing_invoice_lines_subscription_items_billing_lines" FOREIGN KEY ("subscription_item_id") REFERENCES "subscription_items" ("id") ON UPDATE NO ACTION ON DELETE SET NULL, ADD + CONSTRAINT "billing_invoice_lines_subscription_phases_billing_lines" FOREIGN KEY ("subscription_phase_id") REFERENCES "subscription_phases" ("id") ON UPDATE NO ACTION ON DELETE SET NULL, ADD + CONSTRAINT "billing_invoice_lines_subscriptions_billing_lines" FOREIGN KEY ("subscription_id") REFERENCES "subscriptions" ("id") ON UPDATE NO ACTION ON DELETE SET NULL; +-- create index "billinginvoiceline_namespace_subscription_id_subscription_phase" to table: "billing_invoice_lines" +CREATE INDEX "billinginvoiceline_namespace_subscription_id_subscription_phase" ON "billing_invoice_lines" ("namespace", "subscription_id", "subscription_phase_id", "subscription_item_id"); diff --git a/tools/migrate/migrations/atlas.sum b/tools/migrate/migrations/atlas.sum index ffeb7204b..3ff3e5e51 100644 --- a/tools/migrate/migrations/atlas.sum +++ b/tools/migrate/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:oAaMfZ2jOE21Wt+MxLrno40n94cjqAM1+4YmtTxI0zA= +h1:XuqIxi9d+pgX+kpSO962AgR1pI5Fv2qtZF8BtpYZE1k= 20240826120919_init.down.sql h1:AIbgwwngjkJEYa3yRZsIXQyBa2+qoZttwMXHxXEbHLI= 20240826120919_init.up.sql h1:/hYHWF3Z3dab8SMKnw99ixVktCuJe2bAw5wstCZIEN8= 20240903155435_entitlement-expired-index.down.sql h1:np2xgYs3KQ2z7qPBcobtGNhqWQ3V8NwEP9E5U3TmpSA= @@ -65,3 +65,5 @@ h1:oAaMfZ2jOE21Wt+MxLrno40n94cjqAM1+4YmtTxI0zA= 20241209085334_subscription_fields.up.sql h1:ddtZpsd8Ze/pMmAbAATyIt6YGWemgaqoNvFt3yLeGPg= 20241209152120_subs-plan-linking.down.sql h1:B87C+qL1kzR8tBKVDezlo+Tf2Wp70VYCv942IN1ERHo= 20241209152120_subs-plan-linking.up.sql h1:d9IRJhsRZ2PLRMqfGo20Rr8+EQZJYiIw/9hvn9DKVXE= +20241213152122_billing-subscription-linking.down.sql h1:nXdF8YPHB9lgltD+b33f8HCmo4yhgLz1XkuMVYAywb8= +20241213152122_billing-subscription-linking.up.sql h1:IX1Cr1PHb4GiGXoV6DQYr+U9/QZDNoHfH+nJXNWLevs=