mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 02:32:29 +00:00 
			
		
		
		
	fix schema file
This commit is contained in:
		
							
								
								
									
										47
									
								
								db/schema.rb
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								db/schema.rb
									
									
									
									
									
								
							| @@ -73,18 +73,7 @@ ActiveRecord::Schema[7.1].define(version: 2025_10_07_111938) do | ||||
|     t.integer "status", default: 0 | ||||
|     t.jsonb "internal_attributes", default: {}, null: false | ||||
|     t.jsonb "settings", default: {} | ||||
|     t.integer "stripe_billing_version", default: 1, null: false | ||||
|     t.string "stripe_cadence_id" | ||||
|     t.string "stripe_pricing_plan_id" | ||||
|     t.integer "monthly_credits", default: 0, null: false | ||||
|     t.integer "topup_credits", default: 0, null: false | ||||
|     t.datetime "last_credit_sync_at" | ||||
|     t.string "stripe_customer_id" | ||||
|     t.index ["status"], name: "index_accounts_on_status" | ||||
|     t.index ["stripe_billing_version"], name: "index_accounts_on_stripe_billing_version" | ||||
|     t.index ["stripe_cadence_id"], name: "index_accounts_on_stripe_cadence_id" | ||||
|     t.index ["stripe_customer_id"], name: "index_accounts_on_stripe_customer_id" | ||||
|     t.index ["stripe_pricing_plan_id"], name: "index_accounts_on_stripe_pricing_plan_id" | ||||
|   end | ||||
|  | ||||
|   create_table "action_mailbox_inbound_emails", force: :cascade do |t| | ||||
| @@ -808,21 +797,6 @@ ActiveRecord::Schema[7.1].define(version: 2025_10_07_111938) do | ||||
|     t.index ["name", "account_id"], name: "index_email_templates_on_name_and_account_id", unique: true | ||||
|   end | ||||
|  | ||||
|   create_table "failed_usage_reports", force: :cascade do |t| | ||||
|     t.bigint "account_id", null: false | ||||
|     t.integer "credits", null: false | ||||
|     t.string "feature", null: false | ||||
|     t.text "error" | ||||
|     t.integer "retry_count", default: 0 | ||||
|     t.datetime "retried_at" | ||||
|     t.boolean "resolved", default: false | ||||
|     t.datetime "created_at", null: false | ||||
|     t.datetime "updated_at", null: false | ||||
|     t.datetime "resolved_at" | ||||
|     t.index ["account_id"], name: "index_failed_usage_reports_on_account_id" | ||||
|     t.index ["resolved", "created_at"], name: "index_failed_usage_reports_on_resolved_and_created_at" | ||||
|   end | ||||
|  | ||||
|   create_table "folders", force: :cascade do |t| | ||||
|     t.integer "account_id", null: false | ||||
|     t.integer "category_id", null: false | ||||
| @@ -923,24 +897,6 @@ ActiveRecord::Schema[7.1].define(version: 2025_10_07_111938) do | ||||
|     t.index ["title", "account_id"], name: "index_labels_on_title_and_account_id", unique: true | ||||
|   end | ||||
|  | ||||
|   create_table "leave_records", force: :cascade do |t| | ||||
|     t.bigint "account_id", null: false | ||||
|     t.bigint "user_id", null: false | ||||
|     t.date "start_date", null: false | ||||
|     t.date "end_date", null: false | ||||
|     t.integer "leave_type", default: 0, null: false | ||||
|     t.integer "status", default: 0, null: false | ||||
|     t.text "reason" | ||||
|     t.bigint "approved_by_id" | ||||
|     t.datetime "approved_at" | ||||
|     t.datetime "created_at", null: false | ||||
|     t.datetime "updated_at", null: false | ||||
|     t.index ["account_id", "status"], name: "index_leave_records_on_account_id_and_status" | ||||
|     t.index ["account_id"], name: "index_leave_records_on_account_id" | ||||
|     t.index ["approved_by_id"], name: "index_leave_records_on_approved_by_id" | ||||
|     t.index ["user_id"], name: "index_leave_records_on_user_id" | ||||
|   end | ||||
|  | ||||
|   create_table "leaves", force: :cascade do |t| | ||||
|     t.bigint "account_id", null: false | ||||
|     t.bigint "user_id", null: false | ||||
| @@ -1254,7 +1210,7 @@ ActiveRecord::Schema[7.1].define(version: 2025_10_07_111938) do | ||||
|     t.text "message_signature" | ||||
|     t.string "otp_secret" | ||||
|     t.integer "consumed_timestep" | ||||
|     t.boolean "otp_required_for_login", default: false, null: false | ||||
|     t.boolean "otp_required_for_login", default: false | ||||
|     t.text "otp_backup_codes" | ||||
|     t.index ["email"], name: "index_users_on_email" | ||||
|     t.index ["otp_required_for_login"], name: "index_users_on_otp_required_for_login" | ||||
| @@ -1293,7 +1249,6 @@ ActiveRecord::Schema[7.1].define(version: 2025_10_07_111938) do | ||||
|  | ||||
|   add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" | ||||
|   add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" | ||||
|   add_foreign_key "failed_usage_reports", "accounts" | ||||
|   add_foreign_key "inboxes", "portals" | ||||
|   create_trigger("accounts_after_insert_row_tr", :generated => true, :compatibility => 1). | ||||
|       on("accounts"). | ||||
|   | ||||
| @@ -36,6 +36,35 @@ class Enterprise::Billing::V2::StripeCreditSyncService < Enterprise::Billing::V2 | ||||
|     create_stripe_grant(params) | ||||
|   end | ||||
|  | ||||
|   def calculate_balance_from_stripe(stripe_usage, initial_credits) | ||||
|     total_used = stripe_usage | ||||
|     total_granted = initial_credits[:total_granted] | ||||
|     remaining = [total_granted - total_used, 0].max | ||||
|  | ||||
|     monthly_portion = [remaining, initial_credits[:monthly_granted]].min | ||||
|     topup_portion = [remaining - monthly_portion, 0].max | ||||
|  | ||||
|     { | ||||
|       monthly: monthly_portion, | ||||
|       topup: topup_portion, | ||||
|       total: remaining, | ||||
|       usage_from_stripe: total_used, | ||||
|       granted_from_stripe: total_granted, | ||||
|       last_synced: Time.current, | ||||
|       source: 'stripe' | ||||
|     } | ||||
|   end | ||||
|  | ||||
|   def local_fallback_balance | ||||
|     { | ||||
|       monthly: monthly_credits, | ||||
|       topup: topup_credits, | ||||
|       total: monthly_credits + topup_credits, | ||||
|       last_synced: Time.current, | ||||
|       source: 'local_fallback' | ||||
|     } | ||||
|   end | ||||
|  | ||||
|   private | ||||
|  | ||||
|   def stripe_customer_id | ||||
| @@ -153,33 +182,4 @@ class Enterprise::Billing::V2::StripeCreditSyncService < Enterprise::Billing::V2 | ||||
|       { api_key: ENV.fetch('STRIPE_SECRET_KEY', nil), stripe_version: '2025-08-27.preview' } | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   def calculate_balance_from_stripe(stripe_usage, initial_credits) | ||||
|     total_used = stripe_usage | ||||
|     total_granted = initial_credits[:total_granted] | ||||
|     remaining = [total_granted - total_used, 0].max | ||||
|  | ||||
|     monthly_portion = [remaining, initial_credits[:monthly_granted]].min | ||||
|     topup_portion = [remaining - monthly_portion, 0].max | ||||
|  | ||||
|     { | ||||
|       monthly: monthly_portion, | ||||
|       topup: topup_portion, | ||||
|       total: remaining, | ||||
|       usage_from_stripe: total_used, | ||||
|       granted_from_stripe: total_granted, | ||||
|       last_synced: Time.current, | ||||
|       source: 'stripe' | ||||
|     } | ||||
|   end | ||||
|  | ||||
|   def local_fallback_balance | ||||
|     { | ||||
|       monthly: monthly_credits, | ||||
|       topup: topup_credits, | ||||
|       total: monthly_credits + topup_credits, | ||||
|       last_synced: Time.current, | ||||
|       source: 'local_fallback' | ||||
|     } | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -5,6 +5,7 @@ RSpec.describe Enterprise::Billing::V2::PricingPlanService do | ||||
|   let(:service) { described_class.new(account: account) } | ||||
|  | ||||
|   before do | ||||
|     allow(ENV).to receive(:fetch).and_call_original | ||||
|     allow(ENV).to receive(:fetch).with('STRIPE_SECRET_KEY', nil).and_return('sk_test_123') | ||||
|   end | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tanmay Sharma
					Tanmay Sharma