Use BVHs for that, which are faster and more reliable than Roblox .Touched.
You can make one yourself or you can get a nice module which I use too called: SimpleZone which uses zones and BVHs to check if a player or an object touches them.
For the spin motion you can use bezier curves.
For the pushing you can use zones as I mentioned earlier and make a simple knockback when the player touches the part.